查看提交历史
git loggit log -p # 显示每次提交的内容差异git log -2 # 显示最近的 n 条提交git log --stat # 在底部显示简要的增改行数统计git log --pretty=oneline|short|full|fuller # 指定使用完全不同于默认格式的方式展示git log --oneline # --pretty=oneline --abbrev-commit 的简化用法,--abbrev-commit仅显示 SHA-1 的前几个字符,而非所有的 40 个字符git log --since='2018-01-20' # 显示指定时间之后的提交git log --until, --before # 显示指定时间之前的提交git log --author # 显示指定作者相关的提交git log -p --filepath # 某个文件或者路径的提交情况
显示文件中对每一行进行修改的最近一次提交
git blame file
版本回退与撤销提交
git reset 回退本地仓库,将HEAD指向历史中的某次提交,HEAD会往后移动。
git reset HEAD~n # 撤销最近n次提交 默认为--mixedgit reset --soft HEAD~1 # 回退1个版本, 且将这次提交的所有变更都移动到暂存区git reset --mixed HEAD~1 # 回退1个版本,会重置暂存区,将这次提交的所有变更都移动到未暂存阶段git reset --hard HEAD~1 # 回退1个版本,会重置暂存区,将这次提交的所有变更都重置到上次提交的版本
git revert 产生一个新的提交来撤销某次提交的修改,HEAD会往前移动。
git revert HEAD 撤销前一次 commitgit revert HEAD^ 撤销前前一次 commitgit revert {commit} 撤销指定的commit
当revert的commit是一个merge commit时,需要设置-m参数指定出保留哪条分支上的内容,因为merge合并时是将两个分支合并。使用git log可以查看合并的commit的两个父commit:
git log---------------------------------------------------------------------------------------------------commit 6ac7525a897529bf8c6cbb87ec41628f87421975 (origin/develop)Merge: 1bdc2073 81de5e42 # 两个父commitAuthor: xstoop <xstoop.xu@islide.cc>Date: Mon Jun 29 10:29:24 2020 +0800Merge branch 'feature/update_embed' into develop....-----------------------------------------------------------------------------git revert -m 1 6ac7525a897529bf8c6cbb87ec41628f87421975 # 保留第一个父commit的内容# git revert -m 2 6ac7525a897529bf8c6cbb87ec41628f87421975 保留第二个父commit的内容-----------------------------------------------------------------------------[develop 12798294] Revert "Merge branch 'feature/update_embed' into develop" # 产生一个新的提交2 files changed, 8 deletions(-)-----------------------------------------------------------------------------
注意:当使用了
git revert撤销一个merge commit并保留一个分支内容后,如果需要再次合并另一个分支的内容,直接合并只会得到另一个分支在使用git revert后提交的新的commit,因为之前的commit已经被撤销合并了。如果仍然需要全部合并,需要将使用git revert产生的那个commit给撤销掉,即需要撤销之前的撤销。
