假设我需要执行一些平均长度(数天)的重构工作。
我从主分支创建“mybranch”,进行工作,有时从主分支合并到“mybranch”(其他团队成员将继续工作,我可能需要获取他们的更改)。经过一段时间后,我准备将我的更改合并回主分支。
我是否能够压缩仅我的更改(不包括与主分支合并的变更集,因为它们不是我的),并将单个结果提交挑选到主分支中?这是一个可行的情况吗?
假设我需要执行一些平均长度(数天)的重构工作。
我从主分支创建“mybranch”,进行工作,有时从主分支合并到“mybranch”(其他团队成员将继续工作,我可能需要获取他们的更改)。经过一段时间后,我准备将我的更改合并回主分支。
我是否能够压缩仅我的更改(不包括与主分支合并的变更集,因为它们不是我的),并将单个结果提交挑选到主分支中?这是一个可行的情况吗?
没错,你可以通过一个小的测试仓库来确认。只需要执行以下命令:
git rebase --interactive master mybranch
选择squash
,除第一行外所有行都要选择。然后你只需检出master
并进行常规快进合并mybranch
。
在变基之后,“mybranch”中之前的这些提交记录将不再有任何引用。
更为安全的做法是:
git checkout mybranch
git checkout -b movingToMaster
movingTomaster
变基到 master
。git rebase -i master
一个编辑器会弹出,询问您应该选择哪个提交进行挑选、合并或编辑...
编辑该文件,在您的情况下,第一行应保持不变,而其他行应将“pick”更改为“squash”,如果需要,您可以修改提交消息。在对该文件进行足够的更改后保存它。
例如:
pick 0a81405 Bug Fix 1
pick 91be655 Bug Fix 2
pick 1200fc7 Bug Fix 3
pick 1211fb7 Bug Fix 4
pick ba77fdf Bug Fix 5
更改为
pick 0a81405 Bug Fix 1
squash 91be655 Bug Fix 2
squash 1200fc7 Bug Fix 3
squash 1211fb7 Bug Fix 4
squash ba77fdf Bug Fix 5
git checkout master
使用快速合并将您的master
分支移动到movingTomaster
分支
git merge movingTomaster
git branch -D movingTomaster
git merge movingTomaster
,这只是一个快进合并,所以它不会影响您的提交历史记录。 - TheOneTeam
git config --global rerere.enabled 1
启用 rerere。这将有助于避免您不得不两次解决任何合并冲突的情况。 - Karl Bielefeldt