Git:自动修复功能分支中的提交

问题描述 投票:0回答:4

当我完成某个功能时,通常我想要的是自动修复提交,然后在合并到 master 之前强制推送到远程源。

我最终在 master 之上进行了 rebase,这样我就可以修复提交,因为我发现了一个我想要更改的小东西,并且我不希望将该更改作为单独的提交。因此,我以交互方式变基,修复最后一次提交,然后强制推送。有没有一种方法可以一步完成?

git rebase
4个回答
10
投票

您可以在进行修复提交时使用

rebase -i
保存在
git commit --fixup <commit>
中手动编辑提交列表的步骤。然后,如果
rebase.autoSquash
设置为 true,
git rebase -i
会自动将包含此提交的行变成要修复的提交正下方的
fixup
行。


5
投票

假设您想修复最后一次提交,您可以修改该提交。创作更改后,只需发出:

$ 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.

0
投票
git commit -a --amend --no-edit && git push -f

0
投票

我不知道您是否仍在寻找一种一步完成自动修复的方法,但这是我经常使用的别名:

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'

我希望这能有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.