我是新手。我已经将一些更改推送到我的分支,只有我使用的分支。目标是最终在github上打开一个pull请求,将这个分支的更改合并到我们的主分支中。
这就是我所做的:在我检查了自己的分支后,我运行了git pull --rebase
来获取我们原始主分支的最新版本,并在其上面修改我的更改。
我接下来运行了git rebase -i HEAD~8
,其中8
是我选择的数字,我知道它将涵盖我的所有分支提交。从生成的提交列表中,我没有触及任何与我的分支无关的东西,并且压扁了与我的分支有关的那些。
然后我向我的分支机构强制推送,然后开始拉取请求。令我惊讶的是,我选择的所有8个提交都包含在拉取请求中。
显然我有点了解这一点。为什么所有8个提交都会在拉动请求中结束,我将来如何改进以便只有我的分支在那里进行提交? (如果我的提交与主人的其他提交编织在一起,当我打电话给rebase -i
或者至少让他们不接受公关时,我怎么能避免将其他人列入名单?)
我是否在改变原点的主分支时犯了错误,而不是我的分支主人?我是否应该将origin / master拉入并合并到myfork / master中,然后针对myfork / master重新定位?
答案 0 :(得分:1)
我接下来运行了git rebase -i HEAD~8,其中8是我选择的数字
你不应该这样做。如果你已经正确配置了上游分支,那么只有git rebase -i
没有额外参数就可以使用最新版本的git做正确的事情。更糟糕的是,git rebase origin/master
会做正确的事。
然后我做了一个强制推动
在这个用例中不需要。您应该使用git rebase
仅重写本地提交,因此您需要正常推送,并且--force
正在拍摄自己的脚。
如果你的第一个拉取请求不够好,你需要通过重写一些提交来重做它,然后你可能想用力更新你的公关推。
我没有触及与我的分支无关的任何内容
如果远程历史是线性的(没有合并)并且你真的没有触摸(即没有行删除,没有行重新排序,真的没有变化)的开头,那么git
将不会重写这些提交。但如果HEAD
和HEAD~8
之间存在合并,那么git rebase
默认会将其展平,如果您在pick
命令之前修改了某些内容,那么{{1} }命令将在新历史记录的基础上重放提交引入的更改。这将导致 new 提交与您的眼睛相同,但是使用新的标识符(sha1),因此它被git和github视为不同,并且出现在拉动中 - 请求。