如何将我的更改压缩到单个结果提交并选择主分支?

zer*_*kms 11 git

我们假设我需要执行一些平均长度(几天)的重构.

我从master创建"mybranch",完成工作,有时我执行从master到mybranch的合并(其他一些团队成员应该继续工作,可能我需要进行更改).过了一会儿,我准备将我的更改合并回主人.

我是否能够仅仅压缩我的更改(不包括来自master的合并的更改集,因为它们不是我的)并且将我的作品的单个结果提交到主设备中?可以做场景吗?

Kar*_*ldt 7

是的.您可以使用小型测试存储库进行确认.做就是了:

git rebase --interactive master mybranch
Run Code Online (Sandbox Code Playgroud)

并选择squash除第一行以外的所有行.然后你只是结帐master并定期快进合并mybranch.


Kit*_* Ho 5

重新设定基准后,将不会在以前的“ mybranch”中引用这些提交

我会做的并且可能会更安全的是

git checkout mybranch
Run Code Online (Sandbox Code Playgroud)

创建一个分支(它实际上是用于重新定级的临时分支)

git checkout -b movingToMaster
Run Code Online (Sandbox Code Playgroud)

尝试重订的movingTomastermaster

git rebase -i master
Run Code Online (Sandbox Code Playgroud)

将提示编辑器,询问您应该选择,压缩或编辑哪个提交...

编辑该文件,在您的情况下,第一行应保持不变,另一行应将“ 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
Run Code Online (Sandbox Code Playgroud)

改成

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
Run Code Online (Sandbox Code Playgroud)

保存。然后

git checkout master
Run Code Online (Sandbox Code Playgroud)

通过使用快进合并将master分支移动到movingTomaster分支

git merge movingTomaster
Run Code Online (Sandbox Code Playgroud)

注意:这不会造成任何伤害,因为它只是快速合并,不会使您的历史混乱。

如果要删除您的MovingTomaster分支

git branch -D movingTomaster
Run Code Online (Sandbox Code Playgroud)