拉请求后git rebase

时间:2016-11-03 00:28:49

标签: git rebase pull-request

我无法更新拉取请求。

我做了什么:分叉一个存储库,在本地克隆它,创建一个跟踪上游/主控的分支(pr-branch),提交一些更改,推送到原点,打开一个拉取请求。

现在我需要更新我的拉取请求,但上游/主人的其他开发者已做出更改。

所以我做了:

  • git checkout -b master-updated upstream/master
  • git pull
  • git checkout pr-branch
  • git rebase master-updated

我打算进行一些更改,但是git / source树告诉我,origin / pr-branch和pr-branch已经分歧了:前面126个,后面1个

(之前我做了一些改造,但从未见过(或注意:-))这种消息......)

接下来应该做什么?

进行更改,提交然后推送到原点? 拉(但我想创建一个合并提交),提交然后推送到原点?

谢谢!

2 个答案:

答案 0 :(得分:3)

  

进行更改,提交然后推送到原点?

是的,但推动将是一个强迫的:

git push --force

目标是用本地版本替换pr分支的远程历史记录(在更新的上游master之上重新定位)

  

提前126次,落后1次(之前我做了一些改造,但从未见过(或注意:-))这种消息......)

这似乎是在经历了一次变革后的预期:本地和远程历史不再相同。

答案 1 :(得分:1)

git真正的美妙之处在于它不受任何影响,它让软件团队在不强加任何特定工作方式的情况下选择自己喜欢的工作流程。

谨慎使用rebase

Git rebase主要用于维护干净且线性的项目历史记录。但是,这只能通过重写提交历史记录来实现。

这些操作在git中被视为不安全,特别是对于已发布的历史记录,reset具有相似的名声,而是使用revertcheckout或{ {1}}替换。

我对您的问题的理解

我模拟您的情况并获取以下日志历史快照,

merge之前 enter image description here

git rebase之后 enter image description here

显然,git rebase会更改您的旧提交SHA,时间戳等,它会重写您的原始历史记录,但您获得了一个线性日志图。

因此,正如@VonC所提到的,在git rebasegit rebase之后,您通常必须使用git rebase -i 强制推送您的更改。由于git已经足够安全,可以提醒开发者这些变化需要强制更新,开发者自己必须负责他们的“危险”行为。

推荐读物

Git以其陡峭的学习曲线而闻名,如git push -f或其他一些工具。在广泛使用之前了解基础知识总是好的。我也是git的新用户,我发现很难知道数百个git命令/别名/技巧,但我真的觉得这个教程可以帮助我更好地理解git essentials。

https://www.atlassian.com/git/tutorials/what-is-version-control

希望它有所帮助!