本地
HEAD
当前分支的最新提交- 分离HEAD:git switch 节点哈希值 :让head指向了某个具体的提交记录而不是分支名
查看分支状态
git status
-s
--short
简洁模式- Untracked files
- not staged
- to be committed
添加到暂存区
git add .
将工作区所有更改添加到暂存区stage.gitignore
文件中的文件会被忽略
提交
git commit -m "描述"
提交stage的一个快照到本地仓库git commit --amend
修改最近一次提交(如某个文件多/少/错提交了)
撤销
-
git reset
重置当前分支到指定提交点,之后的节点记录会被移除(适用个人分支/本地分支)
--mixed
:保留工作区,移除暂存区(默认)
--soft
:保留工作区和暂存区
--hard
:移除工作区和暂存区(不建议)git reset HEAD
撤销stage中add的所有内容git reset <file>
撤销stage中add的指定文件git reset HEAD^
撤销一次commit(重置分支的 HEAD 到 HEAD 的父提交)
-
git rm --cached <file>
从暂存区删除某文件 -
git revert
撤销某次提交;通过创建一个新的提交来实现撤销,从而保持了提交历史的完整性(适用协作的公共分支)git revert HEAD
撤销最近一次的提交
整理提交记录
git cherry-pick <提交号>
将指定的提交节点复制到当前分支- 如dubug分支的记录不想提交,可以cherry-pick debug后的分支到main
git rebase -i HEAD~3
交互式rebase 会有一个UI窗口
标签
git tag tag_name <提交号>
给某个提交打标签,默认给HEAD打
分支管理
新建分支
git branch name
在当前节点上创建一个名为name的分支git branch -f main HEAD~3
将 main 分支强制指向 HEAD 的第 3 级 parent 提交
分支切换
git switch name
切换到分支name上git checkout -b name
新建并切换git checkout -- <file>
会用暂存区指定的文件替换工作区的文件git checkout HEAD .
或者git checkout HEAD <file>
会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件
分支合并
git merge name
将name分支合并到当前分支(会新建节点)如果有冲突的话会报冲突,需要解决冲突git rebase name
将name分支取出放到当前分支下 (可用于移动分支指针)
远程
远程分支:仓库名/分支名
远程分支反映了远程仓库在你最后一次与它通信时的状态
- 切换到远程分支时会进入分离HEAD状态,因为本地的修改必须push上去才能改变远程分支的状态
拉取
git fetch
从远程仓库下载缺失的记录到本地&更新远程分支的指针- 不会改变你本地仓库的状态
git pull
下载并和当前分支合并- == fetch + merge
git pull --rebase
下载并rebase
上传
git push
上传提交的内容并合并远程分支- ``