以编程方式将最后一次提交修复为上一次
Programmatically fixup last commit into previous
每次我想将我的最新提交修复为第二个最新提交时,我都会这样做
git rebase HEAD~2 -i
<replace pick with fixup on line 2>
有没有办法在自动脚本中执行此操作而无需人工干预?
我试过了,但没用:
git commit --fixup=HEAD
我仍在寻找 "canonical" 本身具有 Git 的解决方案。
这是我的临时解决方案解决方法:
EDITOR="sed -i "2s/pick/fixup/'" git rebase -i HEAD~2
基本上只是用 sed
替换了交互式文本编辑器。
Every time I want to fixup my latest commit,
这可以直接完成:
git commit --amend
年长的 提交:
git commit --fixup $commit
git rebase HEAD~n -i --autosquash
这将自动解释先前由 --fixup(或手动)生成的 fixup!
前缀。
git reset HEAD~1 --soft
git commit --amend --no-edit
或
git reset HEAD~2 --soft
git commit -C ORIG_HEAD^ --reset-author
或
head=`git log -1 --pretty=%H HEAD~1`
git reset HEAD~2 --hard
git merge --squash ORIG_HEAD
git commit -C $head --reset-author
或
head=`git log -1 --pretty=%h HEAD~1`
git reset HEAD~2 --hard
git cherry-pick -n HEAD..ORIG_HEAD
git commit -C $head --reset-author
第一个就足够了。其他三个在这里只是为了好玩,在其他情况下可能会有用。
更新:第二条的解释:
假设我们有 A-B-C
作为最近的三个提交并且 C
是头部。您想要的是将 B
和 C
压缩到一个单独的提交中,从而重用 B
的提交消息。
git reset HEAD~2 --soft
将 HEAD
重置为 A
并在索引和工作树中保留 B
和 C
的更改。然后下面的 git commit
创建一个提交,其中包括索引中的更改,也就是 B
和 C
.
的更改
顾名思义,ORIG_HEAD
指向原始头,在本例中是上次重置前的头,即C
。而ORIG_HEAD^
表示ORIG_HEAD
的第一个父级,即B
。 -C ORIG_HEAD^
表示重用 B
的提交消息而不进行编辑。
更多关于 --soft, -C and --reset-author。
这似乎对我有用,全自动并且不需要任何特定的 sha 或任何东西:
git commit -a --fixup HEAD ; GIT_SEQUENCE_EDITOR=touch git rebase --interactive --autosquash HEAD~2
每次我想将我的最新提交修复为第二个最新提交时,我都会这样做
git rebase HEAD~2 -i
<replace pick with fixup on line 2>
有没有办法在自动脚本中执行此操作而无需人工干预?
我试过了,但没用:
git commit --fixup=HEAD
我仍在寻找 "canonical" 本身具有 Git 的解决方案。
这是我的临时解决方案解决方法:
EDITOR="sed -i "2s/pick/fixup/'" git rebase -i HEAD~2
基本上只是用 sed
替换了交互式文本编辑器。
Every time I want to fixup my latest commit,
这可以直接完成:
git commit --amend
年长的 提交:
git commit --fixup $commit
git rebase HEAD~n -i --autosquash
这将自动解释先前由 --fixup(或手动)生成的 fixup!
前缀。
git reset HEAD~1 --soft
git commit --amend --no-edit
或
git reset HEAD~2 --soft
git commit -C ORIG_HEAD^ --reset-author
或
head=`git log -1 --pretty=%H HEAD~1`
git reset HEAD~2 --hard
git merge --squash ORIG_HEAD
git commit -C $head --reset-author
或
head=`git log -1 --pretty=%h HEAD~1`
git reset HEAD~2 --hard
git cherry-pick -n HEAD..ORIG_HEAD
git commit -C $head --reset-author
第一个就足够了。其他三个在这里只是为了好玩,在其他情况下可能会有用。
更新:第二条的解释:
假设我们有 A-B-C
作为最近的三个提交并且 C
是头部。您想要的是将 B
和 C
压缩到一个单独的提交中,从而重用 B
的提交消息。
git reset HEAD~2 --soft
将 HEAD
重置为 A
并在索引和工作树中保留 B
和 C
的更改。然后下面的 git commit
创建一个提交,其中包括索引中的更改,也就是 B
和 C
.
顾名思义,ORIG_HEAD
指向原始头,在本例中是上次重置前的头,即C
。而ORIG_HEAD^
表示ORIG_HEAD
的第一个父级,即B
。 -C ORIG_HEAD^
表示重用 B
的提交消息而不进行编辑。
更多关于 --soft, -C and --reset-author。
这似乎对我有用,全自动并且不需要任何特定的 sha 或任何东西:
git commit -a --fixup HEAD ; GIT_SEQUENCE_EDITOR=touch git rebase --interactive --autosquash HEAD~2