Git重新定位到上游

时间:2011-07-27 19:42:51

标签: git

所以我分叉了一个项目,并进行了一些更改并将其推送到origin / master。我不打算将这些更改发送回上游。到目前为止一切都很好,但现在我有一些改变,我想向上游推进。

我可以在不同的分支中重新绑定到上游,并提交到该分支吗?我可以从我的分支机构提交这些更改吗?我的回购可怕吗?

3 个答案:

答案 0 :(得分:5)

不,没有破坏。只需从上游/主站分支,在那里进行提交,然后你可以推送(或拉取请求)那些整齐地适合上游/主站的提交。

如果您有A --- B --- C,其中上游/主站位于A且主站位于C,意味着B和C是您不希望向上游发送的提交,则:​​

git checkout -b to-send-upstream A
# work, work, work
# commits
git log A..HEAD # this will be the commits to send upstream

如果你提交了你不会发回主人的话,如果你把它们移到另一个分支并让你的主人与上游/主人保持同步,那么跟踪事情可能会更简单:

git branch my-stuff-not-sent-upstream
git reset --hard A # will wipe out local changes!
git push origin master -f # can lose history if a shared remote!
git push origin my-stuff-not-sent-upstream

将有效地将“master”替换为“my-stuff-not-sent-upstream”,并将master和origin / master设置回与上游/ master相同的提交。

答案 1 :(得分:5)

假设提交A,B,C是您的私人更改,并且提交1,2,3是您想要推送的内容,您的历史记录将如此:

                   (origin/master)
                  /
.... o - A - B - C - 1 - 2 - 3  (master)
      \
       (upstream/master)

现在您要将1,2,3从上游移至新分支:

git checkout master
git checkout -b upstream
git rebase origin/master --onto upstream/master

这样做会切换到名为upstream的新分支,其中您当前的master是。upstream/master。然后它在 1' - 2' - 3' (upstream) / / (origin/master) / / .... o - A - B - C - 1 - 2 - 3 (master) \ (upstream/master) 引用的提交之后重新提交1,2,3。

手术后您将:

{{1}}

现在您已准备好将上游分支推送到上游远程。

答案 2 :(得分:1)

首先,您需要将上游添加为远程。

git remote add upstream https://github.com/upstream/repo.git

这意味着你不仅有“origin”(在GitHub上引用你自己的克隆),还有“上游”(这是你在GitHub上分叉的原始回购)。

然后你需要上游,并从那里结帐:

git checkout -b upstream/master

您可以在那里进行提交,然后返回原点,允许您从那里发出干净的拉取请求。