Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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_Github - Fatal编程技术网

Git无法将分叉回购与远程同步

Git无法将分叉回购与远程同步,git,github,Git,Github,这里是我的场景:我有一个分叉回购(比如F)形式的GitHub原始回购(比如O) 我的分岔回购协议本地副本是L 当我在使用L时,我有一个本地提交,它还没有被推到F,还有一些我目前正在处理的问题的未跟踪更改 当这种情况发生时,原始回购协议会得到更新。现在我必须将F和L与O同步 我按照给出的步骤进行操作,即更准确地说: # Add the remote, call it "upstream": git remote add upstream https://github.com/whoever/wha

这里是我的场景:我有一个分叉回购(比如F)形式的GitHub原始回购(比如O)

我的分岔回购协议本地副本是L

当我在使用L时,我有一个本地提交,它还没有被推到F,还有一些我目前正在处理的问题的未跟踪更改

当这种情况发生时,原始回购协议会得到更新。现在我必须将F和L与O同步

我按照给出的步骤进行操作,即更准确地说:

# Add the remote, call it "upstream":
git remote add upstream https://github.com/whoever/whatever.git

# Fetch all the branches of that remote into remote-tracking branches,
# such as upstream/master:
git fetch upstream

# Make sure that you're on your master branch:
git checkout master

# Rewrite your master branch so that any commits of yours that
# aren't already in upstream/master are replayed on top of that
# other branch:
git rebase upstream/master
这样做之后,我在GitHub上看不到F有任何变化。在O中有4个分支,但在执行上述步骤之后,我在F中没有看到任何新分支

然后我想也许我需要将更改推送到F,所以我做了一个git-push-origin-master。像往常一样,我的提交在F中是可见的,但是我在F中没有看到任何新的分支


那么,我遗漏了什么?我该如何做到这一点呢?

只有您推送到回购的分支在F中可见。因为您只推送到主分支,所以只有主分支在F中可见

如果您想在F中看到O中的所有分支,您必须签出每个分支,然后将其推送到F

名为develop的分支的示例:

对希望在F中看到的O的所有分支执行此操作

如果在本地运行
git branch-a
,它将显示所有本地和远程分支。您会注意到,来自O的分支仅以
remotes/upstream/develope
的形式显示,没有本地分支。您先前运行的
git fetch
命令已拉入所有远程分支,但尚未为它们创建本地分支

上述命令首先从上游分支创建本地分支,然后将它们推送到您自己的远程分支

还有一件事:只有在您没有将分支推送到远程服务器的情况下,才可以使用
rebase
。多次重定基址并在两者之间推进将改变分支的历史记录,您必须强制推进您的更改。只要你是唯一一个使用回购协议的人,这就不是问题,但当其他人已经撤销了你的变更时,就会出现问题。重定基期并在这之后强制推进您的更改将给使用您的回购的其他人带来问题

在这种情况下,您可以合并,而不是重定基址。我使用此别名使用上游远程服务器更新我的fork:

alias gmu='git fetch origin -v; git fetch upstream -v; git merge upstream/master'

嘿,谢谢你的回答。但是,git fetch upstream命令不应该将所有远程分支引入到L,因此push应该将分支推到F吗?当您推时,您只推当前分支(或者推命令中指定的分支)。它不会自动为您创建本地分支。您仍然需要先创建本地分支,然后推送它。
alias gmu='git fetch origin -v; git fetch upstream -v; git merge upstream/master'