Git 以编程方式将最后一次提交修正为上一次提交
每次我想将我的最新提交修改为第二次最新提交时,我都会这样做Git 以编程方式将最后一次提交修正为上一次提交,git,rebase,fixup,Git,Rebase,Fixup,每次我想将我的最新提交修改为第二次最新提交时,我都会这样做 git rebase HEAD~2 -i <replace pick with fixup on line 2> 我仍然在寻找Git本身的“规范”解决方案 以下是我的临时解决方案解决方案: EDITOR="sed -i "2s/pick/fixup/'" git rebase -i HEAD~2 基本上只是用sed取代了交互式文本编辑器,我仍然在寻找Git本身的“规范”解决方案 以下是我的临时解决方案解决方案: EDIT
git rebase HEAD~2 -i
<replace pick with fixup on line 2>
我仍然在寻找Git本身的“规范”解决方案
以下是我的临时解决方案解决方案:
EDITOR="sed -i "2s/pick/fixup/'" git rebase -i HEAD~2
基本上只是用sed取代了交互式文本编辑器,我仍然在寻找Git本身的“规范”解决方案
以下是我的临时解决方案解决方案:
EDITOR="sed -i "2s/pick/fixup/'" git rebase -i HEAD~2
基本上只是用sed
取代了交互式文本编辑器
每次我想修正我的最新的提交
这可以直接完成:
git commit --amend
对于较旧的提交:
git commit --fixup $commit
git rebase HEAD~n -i --autosquash
这将自动解释修正代码>前面由--fixup(或手动)生成的前缀
每次我想修正我的最新的提交
这可以直接完成:
git commit --amend
对于较旧的提交:
git commit --fixup $commit
git rebase HEAD~n -i --autosquash
这将自动解释修正代码>前面由--fixup(或手动)生成的前缀
或
或
或
在你的情况下,第一个就足够了。其他三个在这里只是为了好玩,这在其他情况下可能有用
更新:第二个问题的解释:
假设我们有A-B-C
作为最近三次提交,并且C
是头部。您想要的是将B
和C
压缩成一个提交,该提交重用B
的提交消息
git reset HEAD~2——soft
将HEAD
重置为A
,并在索引和工作树中保留B
和C
的更改。然后,下面的git commit
创建一个commit,其中包括索引中的更改,即B
和C
的更改
顾名思义,ORIG_HEAD
指向原始头部,在本例中是上次重置之前的头部,即C
。而ORIG_HEAD^
表示ORIG_HEAD
的第一个父级,即B
-C ORIG_HEAD^
意味着无需编辑即可重用B
的提交消息
更多关于,和
或
或
或
在你的情况下,第一个就足够了。其他三个在这里只是为了好玩,这在其他情况下可能有用
更新:第二个问题的解释:
假设我们有A-B-C
作为最近三次提交,并且C
是头部。您想要的是将B
和C
压缩成一个提交,该提交重用B
的提交消息
git reset HEAD~2——soft
将HEAD
重置为A
,并在索引和工作树中保留B
和C
的更改。然后,下面的git commit
创建一个commit,其中包括索引中的更改,即B
和C
的更改
顾名思义,ORIG_HEAD
指向原始头部,在本例中是上次重置之前的头部,即C
。而ORIG_HEAD^
表示ORIG_HEAD
的第一个父级,即B
-C ORIG_HEAD^
意味着无需编辑即可重用B
的提交消息
关于和的更多信息。这似乎对我来说是全自动的,不需要任何特定的sha或任何东西:
git commit -a --fixup HEAD ; GIT_SEQUENCE_EDITOR=touch git rebase --interactive --autosquash HEAD~2
这似乎适用于我,全自动,不需要任何特定的sha或任何东西:
git commit -a --fixup HEAD ; GIT_SEQUENCE_EDITOR=touch git rebase --interactive --autosquash HEAD~2
我想我把问题写错了。我想修正(挤压但放弃提交消息)上一次提交的最新提交。首先不要进行提交,--修改上一次提交。我想我写错了问题。我想将最新的提交修改(压缩但放弃提交消息)到上一个提交中。首先不要进行提交,--修改上一个提交。你能解释一下第二个提交吗?它看起来很有用,但我有点困惑。@iBug很高兴它有帮助。你能解释一下第二个吗?它看起来很有用,但我有点困惑。@iBug很高兴它有帮助。@phd的可能重复并不真的,这是一个不同的问题,可以用许多不同的方式解决。@phd的可能重复不真的,这是一个不同的问题,可以用许多不同的方式解决。
git commit -a --fixup HEAD ; GIT_SEQUENCE_EDITOR=touch git rebase --interactive --autosquash HEAD~2