变形,挤压和仅包含我的变化的最佳做法?

时间:2015-06-01 21:54:19

标签: git github

我是新手。我已经将一些更改推送到我的分支,只有我使用的分支。目标是最终在github上打开一个pull请求,将这个分支的更改合并到我们的主分支中。

这就是我所做的:在我检查了自己的分支后,我运行了git pull --rebase来获取我们原始主分支的最新版本,并在其上面修改我的更改。

我接下来运行了git rebase -i HEAD~8,其中8是我选择的数字,我知道它将涵盖我的所有分支提交。从生成的提交列表中,我没有触及任何与我的分支无关的东西,并且压扁了与我的分支有关的那些。

然后我向我的分支机构强制推送,然后开始拉取请求。令我惊讶的是,我选择的所有8个提交都包含在拉取请求中。

显然我有点了解这一点。为什么所有8个提交都会在拉动请求中结束,我将来如何改进以便只有我的分支在那里进行提交? (如果我的提交与主人的其他提交编织在一起,当我打电话给rebase -i或者至少让他们不接受公关时,我怎么能避免将其他人列入名单?)

我是否在改变原点的主分支时犯了错误,而不是我的分支主人?我是否应该将origin / master拉入并合并到myfork / master中,然后针对myfork / master重新定位?

1 个答案:

答案 0 :(得分:1)

  

我接下来运行了git rebase -i HEAD~8,其中8是我选择的数字

你不应该这样做。如果你已经正确配置了上游分支,那么只有git rebase -i没有额外参数就可以使用最新版本的git做正确的事情。更糟糕的是,git rebase origin/master会做正确的事。

  

然后我做了一个强制推动

在这个用例中不需要。您应该使用git rebase仅重写本地提交,因此您需要正常推送,并且--force正在拍摄自己的脚。

如果你的第一个拉取请求不够好,你需要通过重写一些提交来重做它,然后你可能想用力更新你的公关推。

  

我没有触及与我的分支无关的任何内容

如果远程历史是线性的(没有合并)并且你真的没有触摸(即没有行删除,没有行重新排序,真的没有变化)的开头,那么git将不会重写这些提交。但如果HEADHEAD~8之间存在合并,那么git rebase默认会将其展平,如果您在pick命令之前修改了某些内容,那么{{1} }命令将在新历史记录的基础上重放提交引入的更改。这将导致 new 提交与您的眼睛相同,但是使用新的标识符(sha1),因此它被git和github视为不同,并且出现在拉动中 - 请求。