Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 以编程方式将最后一次提交修正为上一次提交_Git_Rebase_Fixup - Fatal编程技术网

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