以图结构展示 commit 之间的关联
git log --all --graph --decorate [--oneline]
切换当前版本
git checkout commit_hash
比较版本差异
git diff commit_hash1 commit_hash2 file_name
丢弃更改
git checkout file_name
分支可以视为 commit 的引用,而 HEAD 则是当前 commit。
查看所有分支
git branch [-vv]
创建分支
git branch branch_name
创建新分支并切换到该分支
git checkout -b new_branch
合并分支到当前分支
git merge branch_name
合并失败后执行:
git merge --abort
解决完冲突后继续合并:
git merge --continue
添加远程
git remote add <name> <url>
推送到远程,创建或更新远程分支
git push <remote> <local branch>:<remote branch>
克隆
git clone <url> <folder name>
绑定当前本地HEAD指向的分支与远程分支:
git branch --set-upstream-to=<remote>/<branch>
拉取远程分支,将远程仓库更新的内容同步到本地,但不影响本地分支的内容,需要手动 merge
git fetch <remote> 或者 git pull
当更新了一个文件的多处代码时,如果只想 add 其中一些更改,可以使用交互模式:
git add -p file_name
在该模式下,程序会询问是否保存所有更改,输入 s 可以将这些更改进行划分,然后逐一选择是否保存(y or n)。
保存后,通过
git diff --cached
查看差异时,只会看到保留的那部分更改。
当想要知道谁更新了某行代码时,可以通过
git blame file_name
查看所有更改对应的 commit、作者和注释。在里面找到想要的 commit 后,复制其哈希值,然后通过
git show commit_hash
查看详细内容。
做出一些更改后想要隐藏起来:
git stash
复原:
git stash pop
当你有一千次以上的提交后,发现出了Bug,你可能想一步步回退 commit 然后重新执行单元测试,但如果问题出在第一次 commit 上,这就很烦了,下面的命令可以自动完成这样的工作:
git bisect