使用 Git 首先要弄清楚一些概念,从网上找了一张图:
最常用的就是图中的 6 个命令,但在使用之前首先要弄清楚几个名词概念:
已经执行 commit,要想更改 commit 信息(修改最近一次提交)。
git commit --amend
执行上述命令后,进入注释页面进行修改,修改后保存退出。
然后使用 git log --pretty=oneline
查看内容,可以发现已经成功修改了。
需要注意的是此项命令会修改提交时的 commit_id,即会覆盖原本的提交,需要谨慎操作。
已经执行 commit,且已经 push 的提交(修改最近一次提交)。
git commit --amend
执行上述命令后,进入注释页面进行修改,修改后保存退出。
然后执行强制推送命令:
git push --force-with-lease origin master
commit 时,遗漏提交部分更新,有两种解决方案:
git commit -m "提交消息"
此时,git 上会出现两次 commit。
git add <missed-file> # missed-file 为遗漏提交文件
git commit --amend --no-edit
--no-edit
表示提交消息不会更改,该操作会修改上一次提交的内容,但不会要求你编辑提交信息,仍保持上一次 commit 的 message。
提交错误文件,需要回退到上一个 commit 版本,再重新 commit。
直接删除指定的 commit。
# 修改版本库,保留暂存区,保留工作区
# 将版本库软回退 1 个版本,软回退表示将本地版本库的头指针全部重置到指定版本,且将这次提交之后的所有变更都移动到暂存区。
git reset --soft HEAD~1
# 修改版本库,修改暂存区,修改工作区
# 将版本库回退 1 个版本,不仅仅是将本地版本库的头指针全部重置到指定版本,也会重置暂存区,并且会将工作区代码也回退到这个版本
git reset --hard HEAD~1
# Git 版本回退,回退到特定的 commit_id 版本,可以通过 git log 查看提交历史,以便确定要回退到哪个版本(commit 之后的即为ID);
git reset --hard <commit_id>
# 如果需要撤销已经 push 到远端的 commit,使远端的仓库也回退到相应的版本,需要在 push 时加上参数 --force:
git push origin <分支名> --force
撤销某次操作,此次操作之前和之后的 commit 和 history 都会保留,并且把这次撤销作为一次最新的提交。
# 撤销前一次 commit
git revert HEAD
# 撤销前前一次 commit
git revert HEAD^
# 撤销指定的版本,撤销也会作为一次提交进行保存
git revert <commit_id>
git revert
是提交一个新的版本,将需要 revert 的版本的内容作为一次新的 commit 再反向修改回去,版本会递增,不影响之前提交的内容。
相对之下,git revert
更加优雅,以前的一篇博客对比过两个命令。
git revert
是用一次新的 commit 来回滚之前的 commit,git reset
是直接删除指定的 commit。git revert
是用一次逆向的 commit「中和」之前的提交,因此日后合并老的 branch 时,导致这部分改变不会再次出现,但是 git reset
是直接把某些 commit 在某个 branch 上删除,因而和老的 branch 再次 merge 时,这些被回滚的 commit 应该还会被引入。git reset
是把 HEAD 向后移动了一下,而 git revert
是 HEAD 继续前进,只是新的 commit 的内容和要 revert 的内容正好相反,能够抵消要被 revert 的内容。来源:百度云盘资源
原文:https://www.cnblogs.com/fei8899/p/14264614.html