• 对于注定会优秀的人来说,他所需要的,只是时间----博主
  • 手懒得,必受贫穷,手勤的,必得富足----《圣经》
  • 帮助别人,成就自己。愿君在本站能真正有所收获!
  • 如果你在本站中发现任何问题,欢迎留言指正!
  • 宝剑锋从磨砺出,梅花香自苦寒来!
  • 本站开启了防爆破关小黑屋机制,如果您是正常登录但被关进小黑屋,请联系站长解除!

git更改前一次commit内容并提交到master

Git eryajf 1个月前 (07-13) 241°C 已收录 0个评论
本文预计阅读时间 9 分钟

在使用git的时候,我们经常会进行提交push,但是如果发现当前分支新增的内容并不好,想要回退到上一次commit的内容,该如何操作呢?

现在先简单操作一下,创建一个原始测试文件。

$ echo a > test
$ git add .
$ git commit -m "a"
$ git push origin master

现在模拟正常开发,变更了test内容,并提交。

$ echo b > test
$ git add .
$ git commit -m "b"
$ git push origin master

就在这个时候,突然发觉,新修改为b,并不是想要的结果,上次的a倒是想要的,而且新的更改打算基于a来进行,因此就需要退回去了(这里忽略在当前分支更改的情况,因为有时候文件变更之多,已经不是在当前分支更改这么简单的事情了)。

首先查看一下两次提交的信息:

$ git log
commit bbdad59835b4ad0fabafcc938bdc97c31ec5fbcb (HEAD -> master, origin/master)
Author: eryajf <liqilong@edspay.com>
Date:   Sat Jul 13 23:55:15 2019 +0800

    b

commit ae547b02bc32927b2dfd9a05d0ced53c1838180c
Author: eryajf <liqilong@edspay.com>
Date:   Sat Jul 13 23:52:56 2019 +0800

    a

注意这个时候test文件里边的内容是b,我现在想先将其回退到 23:52:56的提交,然后在那个基础上,更改文件内容,并作为最新的代码合并到主分支。

$ git log --pretty=oneline
bbdad59835b4ad0fabafcc938bdc97c31ec5fbcb b
ae547b02bc32927b2dfd9a05d0ced53c1838180c a
065e6fbe1d58b66a20503a3178bacaaa2c740d97 (origin/test, old-master) new
c78e5e4e36820d473aa4954d806d5cbb3eff4f0c 1
5a6ebddb9188233eccfc023eb18e28ff04f8723f 0
819665d73f393992e358c4acc3da4c4aa0eaaa7c fix
16b82739181d97fa3c54c08f92566d7daecccbec (origin/dev, dev) test
98ed573c557430eda03d78d25783b8798b9ab036 fei
9d9b833cd05d733bd26b9236d0f6de4c4cf0d4b1 test
f8d74d07898dd57cb2c6ce3bbd7accffe75daa08 test

首先我们切换到a的那次HEAD中。

Administrator@liqilong MINGW64 ~/Desktop/pipeline/test (master)
$ git checkout ae547b02bc32927
Note: checking out 'ae547b02bc32927'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at ae547b0 a

切过去之后,基于这个位置新建一个分支,然后做新的更改,更改之后,将新的分支的更改推送到远程仓库。

$ git checkout -b atest
Switched to a new branch 'atest'

Administrator@liqilong MINGW64 ~/Desktop/pipeline/test (atest)
$ cat test
a

Administrator@liqilong MINGW64 ~/Desktop/pipeline/test (atest)
$ echo c > test

Administrator@liqilong MINGW64 ~/Desktop/pipeline/test (atest)
$ git add .

Administrator@liqilong MINGW64 ~/Desktop/pipeline/test (atest)
$ git commit -m "c"
[atest 102e070] c
 1 file changed, 1 insertion(+), 1 deletion(-)

Administrator@liqilong MINGW64 ~/Desktop/pipeline/test (atest)
$ git push origin atest

现在已经将atest这个分支推送到了远程仓库,我们想把这个分支来作为最新的主分支,但是如果直接合并肯定会有冲突,也就是说现在的被合并分支,要比master分支更靠前,这一点,用工具来查看会更加直观。

从Gitlab的分支图也可以看到。

这个时候,如果想直接把atest合并到master,显然不可行,因此可以有两种方案,基本上就是更易其主的思路。

  • 要么把master删除,然后atest上位。
  • 或者将maser重命名,再将atest重命名为master。

这里采用第二种方案操作一下:

Administrator@liqilong MINGW64 ~/Desktop/pipeline/test (atest)
$ git branch -m master old-master

Administrator@liqilong MINGW64 ~/Desktop/pipeline/test (atest)
$ git branch -m atest master

Administrator@liqilong MINGW64 ~/Desktop/pipeline/test (master)
$ git push -f origin master

这样,就实现了基于之前一次commit的提交回退并二次开发提交的操作。也适用于有一些master分支年久失修的情况。

遇到的报错:

  • 1,强制提交到master报错。

报错内容如下:

$ git push -f origin master
  Total 0 (delta 0), reused 0 (delta 0)
  remote: GitLab: You are not allowed to force push code to a protected branch on this project.

是因为master是受保护分支,可以到Gitlab中对项目的master分支进行解除限制。

  • 2,you need to resolve your current index first

在切换分支的时候,总会提示这个信息:

  $ git checkout master
  error: you need to resolve your current index first
  a: needs merge

这个时候只需执行 git reset --merge即可解除。


weinxin
扫码订阅本站,第一时间获得更新
微信扫描二维码,订阅我们网站的动态,另外不定时发送WordPress小技巧,你可以随时退订,欢迎订阅哦~

二丫讲梵 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明git更改前一次commit内容并提交到master
喜欢 (1)
[如果想支持本站,可支付宝赞助]
分享 (0)
eryajf
关于作者:
学无止境,我愿意无止境学。书山有路,我愿意举身投火,淬炼成金!

您必须 登录 才能发表评论!