以编程方式修复上一次提交到上一次

iBu*_*Bug 1 git rebase fixup

每当我想将最新的提交修复到第二个最新的提交时,我就会这样做

git rebase HEAD~2 -i
<replace pick with fixup on line 2>
Run Code Online (Sandbox Code Playgroud)

有没有办法在自动脚本中执行此操作,而不受人为干扰?

我尝试过这个并不起作用:

git commit --fixup=HEAD
Run Code Online (Sandbox Code Playgroud)

Elp*_*Kay 7

git reset HEAD~1 --soft
git commit --amend --no-edit
Run Code Online (Sandbox Code Playgroud)

要么

git reset HEAD~2 --soft
git commit -C ORIG_HEAD^ --reset-author 
Run Code Online (Sandbox Code Playgroud)

要么

head=`git log -1 --pretty=%H HEAD~1`
git reset HEAD~2 --hard
git merge --squash ORIG_HEAD
git commit -C $head --reset-author
Run Code Online (Sandbox Code Playgroud)

要么

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
Run Code Online (Sandbox Code Playgroud)

第一个就足够了.其他三个只是为了好玩,在其他情况下可能会有用.

更新:第二个解释:

假设我们有A-B-C最新的三个提交并且C是头部.你想要的是压缩BC进入一个重用了B提交消息的提交.

git reset HEAD~2 --soft复位HEADA并保持的变化B,并C在索引和工作树.然后,下面git commit将创建一个提交,其包括在索引中的变化,又名的变化BC.

顾名思义,ORIG_HEAD指向原始头部,在这种情况下指向最后一次重置之前的头部,即C.并且ORIG_HEAD^意味着第一个父母ORIG_HEAD,即B.-C ORIG_HEAD^意味着重用B没有编辑的提交消息.

更多关于--soft,-C--reset-author.


gra*_*ity 5

每次我想修复我的最新提交时,

这可以直接完成:

git commit --amend
Run Code Online (Sandbox Code Playgroud)

对于较旧的提交:

git commit --fixup $commit
git rebase HEAD~n -i --autosquash
Run Code Online (Sandbox Code Playgroud)

这将自动解释fixup!之前由 --fixup (或手动)生成的前缀。