git会自动将提交挤压到以前更改了相同文件的提交
我有一个功能分支,它包含一系列涉及不同文件的交叉提交。我想将涉及相同文件的提交挤在一起,但不想将彼此不接触的一系列提交挤在一起。我不想通过手动检查每次提交的更改来确定这一点 例如,如果存在以下提交:git会自动将提交挤压到以前更改了相同文件的提交,git,squash,Git,Squash,我有一个功能分支,它包含一系列涉及不同文件的交叉提交。我想将涉及相同文件的提交挤在一起,但不想将彼此不接触的一系列提交挤在一起。我不想通过手动检查每次提交的更改来确定这一点 例如,如果存在以下提交: 更改文件A和B 变化C 改变 变化C 更改C和D 更改A和C 重新基准将自动生效 将3压到1上 将4压到2上 不要把5压在2上 不要将6压缩到1或2上(但稍后对A和/或C的更改会压缩到6上) 可能在这之后会出现一些破坏-可能一些更改依赖于单独文件中的其他更改,并且现在已经无序,但是如果我确实希望
- 将3压到1上
- 将4压到2上
- 不要把5压在2上
- 不要将6压缩到1或2上(但稍后对A和/或C的更改会压缩到6上)
git-rebase-i
让这变得非常简单。
下面似乎有很多步骤,但这只是因为我将带您详细了解它的工作原理,并添加了一些安全步骤
git checkout-b
在临时分支上执行此工作。这样可以很容易地将重新排序和挤压的分支与原始分支进行比较,以确保没有丢失任何更改
head~6
应该可以工作,但要使用任何有效的引用,例如
,^
,一些标记^
todo
脚本(本质上是一个高级rebase脚本)。它将在编辑器中打开。它将显示自
以来的提交列表,以及每个提交的默认命令(pick
)
git-rebase
按原样运行文件,它将按该顺序重放这些确切的提交——换句话说,与以前一样,不会有任何更改。)
todo
脚本
“可能在此之后出现了一些损坏-可能一些更改依赖于单独文件中的其他更改,现在已无法正常运行”
这将显示为合并冲突。重设基础过程将停止,以便您可以解决这些冲突。每次
rebase-i
出于任何原因停止时,它都会提供有关需要执行的操作以及如何恢复脚本的有用信息
如果没有冲突,脚本将不停止地逐个提交
您可以在任何时候遇到问题时轻松中止。
如果任何冲突给您带来了太多的麻烦,或者您有疑问,您可以使用git-rebase--abort
中止整个脚本,并返回到正确的起始位置。因此没有风险
git diff
确保没有丢失任何更改。如果一切正常,您可以git branch-f
将原始分支指向新的提交历史记录
git-rebase-i
几乎是我最喜欢的git命令。我值得成为这方面的专家git-help-rebase
是一个很好的开始——阅读有关-interactive
rebase的部分。此外,可能还有很多博客帖子在上面。git-rebase-i
让这变得非常简单。
下面似乎有很多步骤,但这只是因为我将带您详细了解它的工作原理,并添加了一些安全步骤
git checkout-b
在临时分支上执行此工作。这样可以很容易地将重新排序和挤压的分支与原始分支进行比较,以确保没有丢失任何更改
head~6
应该可以工作,但要使用任何有效的引用,例如
,^
,一些标记^
todo
脚本(本质上是一个高级rebase脚本)。它将在编辑器中打开。它将显示自
以来的提交列表,以及每个提交的默认命令(pick
)
git-rebase
按原样运行文件,它将按该顺序重放这些确切的提交——换句话说,与以前一样,不会有任何更改。)
todo
脚本
“可能在此之后出现了一些损坏-可能一些更改依赖于单独文件中的其他更改,现在已无法正常运行”
这将显示为合并冲突。重设基础过程将停止,以便您可以解决这些冲突。每次
rebase-i
出于任何原因停止时,它都会提供有关需要执行的操作以及如何恢复脚本的有用信息<