Git重新定位到上游

Dre*_*rew 12 git

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

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

Rya*_*art 5

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

如果你有A --- B --- C,其中up​​stream/master在A,master在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
Run Code Online (Sandbox Code Playgroud)

如果你有提交你不会发回master,那么如果你将它们移动到另一个分支并让你的master与upstream/master保持同步,那么跟踪它可能会更简单:

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

以"我 - 东西 - 不发送上游",并设置主产地和/主,将有效取代"大师"回到同一提交上游/大师.


cmc*_*nty 5

假设提交A,B,C是您的私人更改,并且提交1,2,3是您想要推送的,您的历史将如下所示:

                   (origin/master)
                  /
.... o - A - B - C - 1 - 2 - 3  (master)
      \
       (upstream/master)
Run Code Online (Sandbox Code Playgroud)

现在你想将1,2,3从上游移到一个新的分支:

git checkout master
git checkout -b upstream
git rebase origin/master --onto upstream/master
Run Code Online (Sandbox Code Playgroud)

这样做是切换到一个名为upstream当前位置的新分支master.然后它在引用提交后重新提交1,2,3 upstream/master.

手术后您将拥有:

         1' - 2' - 3' (upstream)
        /
       /           (origin/master)
      /           /
.... o - A - B - C - 1 - 2 - 3  (master)
      \
       (upstream/master)
Run Code Online (Sandbox Code Playgroud)

现在,您将准备将上游分支推送到上游远程.