Git:在同一操作中添加、提交和 rebase/squash
Git: add, commit and rebase/squash in same operation
我经常发现自己在功能分支上,提交了更改。然后,我发现我必须做出改变,所以我:
- 做出改变
- 使用
git add -A
将所有文件更改添加到索引
- 使用
git commit -m <commit message>
提交更改
- Rebase 更改并使用
git rebase -i HEAD~2
压缩最后两个提交,并压缩最新的提交,这样我最终得到 1 个提交
这是我常用的一个流程,但是感觉比较繁琐,需要手动操作。有没有更聪明的方法来做到这一点,或者更常见的是为这种任务创建 shell 函数或别名?我说的是第 2 步到第 4 步。
也许修改您刚刚对功能分支的 HEAD 提交的提交的最简单方法是 修改 通过以下方式提交的提交:
git commit --amend 'your commit message here'
Git commit amend 通过创建一个 new 提交来工作,功能上与旧提交相同,加上您的新更改,然后将旧的 HEAD 提交替换为新的。
请注意,这会重写历史记录,因此它不适用于您已经推送并且可能已经被其他人拉取的分支。但是在这方面它并不比你现在的变基方法差。
作为重型变基方法的替代方法,有一种更简单的方法来压缩分支的两个顶级提交。您可以进行软重置,然后进行提交:
git reset --soft HEAD~2
git commit -m 'made a small change to latest commit'
Git reset soft 通过将 HEAD 指针移回两次提交(在本例中)来工作,同时将工作目录和阶段保持原样。这实际上是将第一次提交中完成的工作,加上第二次补丁提交,放在第一次提交之前的提交之上。然后,当您提交这项工作时,您将有效地将所有内容压缩为一次提交。
但大多数时候我发现自己使用 commit amend 而不是 reset soft 来处理这种情况。
我经常发现自己在功能分支上,提交了更改。然后,我发现我必须做出改变,所以我:
- 做出改变
- 使用
git add -A
将所有文件更改添加到索引
- 使用
git commit -m <commit message>
提交更改
- Rebase 更改并使用
git rebase -i HEAD~2
压缩最后两个提交,并压缩最新的提交,这样我最终得到 1 个提交
这是我常用的一个流程,但是感觉比较繁琐,需要手动操作。有没有更聪明的方法来做到这一点,或者更常见的是为这种任务创建 shell 函数或别名?我说的是第 2 步到第 4 步。
也许修改您刚刚对功能分支的 HEAD 提交的提交的最简单方法是 修改 通过以下方式提交的提交:
git commit --amend 'your commit message here'
Git commit amend 通过创建一个 new 提交来工作,功能上与旧提交相同,加上您的新更改,然后将旧的 HEAD 提交替换为新的。
请注意,这会重写历史记录,因此它不适用于您已经推送并且可能已经被其他人拉取的分支。但是在这方面它并不比你现在的变基方法差。
作为重型变基方法的替代方法,有一种更简单的方法来压缩分支的两个顶级提交。您可以进行软重置,然后进行提交:
git reset --soft HEAD~2
git commit -m 'made a small change to latest commit'
Git reset soft 通过将 HEAD 指针移回两次提交(在本例中)来工作,同时将工作目录和阶段保持原样。这实际上是将第一次提交中完成的工作,加上第二次补丁提交,放在第一次提交之前的提交之上。然后,当您提交这项工作时,您将有效地将所有内容压缩为一次提交。
但大多数时候我发现自己使用 commit amend 而不是 reset soft 来处理这种情况。