Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 吉特重新调整到上游_Git - Fatal编程技术网

Git 吉特重新调整到上游

Git 吉特重新调整到上游,git,Git,所以我分叉了一个项目,做了一些更改,并将这些更改推给了origin/master。我不打算将这些更改发送回上游。到目前为止一切都很好,但现在我有一些改变,我确实想向上游推进 我是否可以在另一个分支中重新设置到上游,并提交到该分支?我可以从我的分支提交这些更改吗?我的回购协议被严重破坏了吗?没有,没有。只需从上游/主节点进行分支,在那里进行提交,然后您就可以推送(或拉取请求)这些提交,这些提交正好适合上游/主节点 如果您有一个--B--C,其中上游/主控在A,主控在C,这意味着B和C是您不想向上游

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


我是否可以在另一个分支中重新设置到上游,并提交到该分支?我可以从我的分支提交这些更改吗?我的回购协议被严重破坏了吗?

没有,没有。只需从上游/主节点进行分支,在那里进行提交,然后您就可以推送(或拉取请求)这些提交,这些提交正好适合上游/主节点

如果您有一个--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
如果您有不打算在master上发回的提交,那么如果您将这些提交移动到另一个分支并使您的master与上游/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

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

首先,您需要将upstream添加为远程提交

git remote add upstream https://github.com/upstream/repo.git
这意味着您不仅有“origin”(在GitHub端引用您自己的克隆),还有“上游”(即您在GitHub端分叉的原始回购)

然后您需要从上游取货,并从那里结账:

git checkout -b upstream/master

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

假设提交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
这样做的目的是切换到一个新的分支,名为
上游
,您当前的
主机所在的位置。然后,它在上游/master引用的提交之后,对提交1、2、3进行重定

手术后,您将有:

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

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

您是说上游分支/主分支?命令是做什么的,可能是我缺少的部分。在意识到来源后更新了我的答案!=上游更有意义吗?太棒了这就是我要找的。我试图重新设置基址,但这会导致很多头痛,几乎没有结果。作为最佳实践,我应该将这些更改变成一个分支。对上游进行拉入,如果它被接受,则合并到master?我不能说是“最佳实践”,但我希望在成功拉入请求后,以及从上游拉入后,您已经看到它合并。我应该已经在上游拥有原始回购协议,但当我运行checkout-b upstream/master时,我得到
错误:无法解析引用引用/heads/upstream/master:不是目录
致命:无法锁定引用以进行更新:不是目录
@Drew:只有当您的“
git remote-v
将“upstream”列为您与本地repo.is关联的远程repo之一时,这才应该起作用提交散列?这真是太棒了,非常感谢您描述这个过程。--On指定您希望拾取一个带有所有提交的分支,将其从提交图中裁剪出来,然后将其重新附加到指定的分支/提交上。