当我完成某个功能时,通常我想要的是自动修复提交,然后在合并到 master 之前强制推送到远程源。
我最终在 master 之上进行了 rebase,这样我就可以修复提交,因为我发现了一个我想要更改的小东西,并且我不希望将该更改作为单独的提交。因此,我以交互方式变基,修复最后一次提交,然后强制推送。有没有一种方法可以一步完成?
您可以在进行修复提交时使用
rebase -i
保存在 git commit --fixup <commit>
中手动编辑提交列表的步骤。然后,如果 rebase.autoSquash
设置为 true,git rebase -i
会自动将包含此提交的行变成要修复的提交正下方的 fixup
行。
假设您想修复最后一次提交,您可以修改该提交。创作更改后,只需发出:
$ git commit -a --amend --no-edit
不过,你仍然需要用力推动。
这是上面使用的 git commit 选项的细分:
-a, --all:
Tell the command to automatically stage files that have been modified and
deleted, but new files you have not told Git about are not affected.
--amend:
Replace the tip of the current branch by creating a new commit.
--no-edit:
Use the selected commit message without launching an editor.
For example, `git commit --amend --no-edit` amends a commit without changing
its commit message.
git commit -a --amend --no-edit && git push -f
我不知道您是否仍在寻找一种一步完成自动修复的方法,但这是我经常使用的别名:
git config --global alias.autofixup '!git commit --fixup $1 && git rebase --autosquash --interactive --rebase-merges $1~1 && echo "autofixup finished"'
这是我用于提交消息“改写”的另一个别名:
git config --global alias.autoreword '!git commit --no-verify --fixup reword:$1 && GIT_EDITOR=true && git rebase -r -i --autosquash $1~1 && echo \"autoreword finished\"'
然后,当我推送时,我尝试确保不要使用第三个别名覆盖我不知道的提交:
git config --global alias.push-with-lease 'push --force-with-lease --force-if-includes'
我希望这能有所帮助!