当前位置:   article > 正文

[ git ] 撤销commit +修改commit信息 + 合并多个commit 命令总结_git撤销commit

git撤销commit

一、撤销commit

写完代码后,我们一般这样

git add . //添加所有文件

git commit -m “本功能全部完成”

而如果想撤回commit,可以使用下面命令撤回commit操作,但是代码仍然保留。

git reset --soft HEAD^
  • 1

或者

git reset --soft HEAD~1
  • 1

HEAD^的意思是上一个版本,也可以写成HEAD~1,这两个命令都表示撤回到上一次提交,不修改本次提交的改动。即不删除工作空间改动代码,撤销commit,不撤销git add .
补充其他两个参数:
–mixed
意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作
这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。

–soft
不删除工作空间改动代码,撤销commit,不撤销git add .

–hard
删除工作空间改动代码,撤销commit,撤销git add .

注意完成这个操作后,就恢复到了上一次的commit状态。

二、修改commit message

1、git 修改未提交到git 远程仓库

git commit --amend
  • 1

就可以修改最近一次的commit信息
进入vim操作界面之后, 点击字母键 i 然后进入INSERT模式,然后对commit信息进行修改,然后ESC 然后 :wq 保存退出,然后执行 git log 会发现最近的一次commit信息被修改成功了。

2、git 修改已经提交到git远程仓库的commit信息

   1. 首先回撤到上一次提交,不修改本次提交的改动 git reset --soft HEAD~1

   2. 重新做一次提交 git commit -m “重新提交commit信息”

   3. 强推本地分支到远程仓库 git push -f origin master

   4. 查看远程仓库中的是否已经修改commit信息
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3、修改任意一次的commit信息
可以用到使用git rebase -i

三、 合并多次commit

1. 要合并的commit还没有push到远程仓库
这种情况下有三种命令可以实现要求:

第一种(推荐):使用git reset方式(因为比较好理解,也是笔者推荐的方式)。步骤如下:

git log查看要合并的commit.记住最早的commit号。
git reset commit_number.回退到此commit号。因为没有使用--hard,所以内容都保存在工作区。
git add .将回退的的内容再次添加到暂存区
git commit -m "comment".再次提交。
git log。使用此命令查看,发现合并完成。
  • 1
  • 2
  • 3
  • 4
  • 5

这种方式主要利用了git reset回退时并不会删除工作区的内容。因此可以一次性重新提交。可以配合实际开发中在写一个稍微大一点的功能时,自己分小点git add并且commit一些文件和代码,控制本地工作区需要组织的文件和代码在一定范围。之后再一次性合成一个大的commit推到远程。

第二种:使用git commit --amend方式。只能合并当前要提交的和最近一次提交的commit.
修改工程文件。

git add .将文件添加到暂存区。
git commit --amend -m "commet".提交。
git log。使用此命令查看,发现与最近一次commit为一个commit。
  • 1
  • 2
  • 3

第三种: 使用git rebase变基的方式,这种我个人用得不是很多。git rebase合并多次commit

2. 有些commit已经push到了远程仓库
有时候自己分支提完pr后自己发现的一些拼写错误/逻辑漏洞就需要再推个commit, 或者有时候其他开发帮忙review代码时,发现部分代码有更优雅的写法时,都需要增加新的commit。导致在最后提交分支的时候,如果一个小功能来来回回自己还改了很多次,多多少少有点不好意思,简直想把一部分commit藏起来。就可以使用以下方法,push时要用到–force或–force-with-lease选项进行强制推送。

步骤如下:

保证要推送的分支与本地分支同步。
使用上面提到的三种方式任意一种进行commit的合并。
使用git push --force-with-lease origin dev的方式强制推送。
  • 1
  • 2
  • 3

注意:如果推送的是主分支master,也可能会推送失败,并提示(You are not allowed to force push code to a protected branch on this project.)这是由于gitlab等服务器设置了主分支保护造成的。可以设置gitlab的"Settings" -> “Repository” -> scroll down to “Protected branches”.然后再推送。

这种方法要注意临时在别的功能分支想git commit 直接点上键盘回到上个命令的时候,因为又用了一次git commit --amend -m "XXX"时合进去的分支会变。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/530668
推荐阅读
  

闽ICP备14008679号