每当我想将最新的提交修复到第二个最新的提交时,我就会这样做
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)
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是头部.你想要的是压缩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和--reset-author.
每次我想修复我的最新提交时,
这可以直接完成:
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 (或手动)生成的前缀。