2015-07-09 3 views
1

Вот мой сценарий: У меня есть раздвоенный Repo (скажем F) образуют оригинальный репозиторий на GitHub (скажем O).Git не может синхронизировать раздвоенный репо с дистанционным

Моя местная копия реквизита Forked: L.

Как я работаю с L, у меня есть 1 совершить локально, которая еще не была нажата в F и некоторых неотслеживаемых изменений для выпуска которой я работаю в настоящее время.

В то время как это происходит, исходное репо O обновляется. Теперь мне нужно будет синхронизировать F и L с O.

Я следовал инструкциям, как указано here, то есть их, чтобы быть более точным:

# 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 

После этого, я не вижу каких-либо изменений в F на GitHub. Было 4 филиала в O, но после следующих шагов я не вижу ни одного из этих новых ветвей в F.

Тогда я подумал, что, возможно, мне нужно нажать на изменения F, поэтому я сделал git push origin master. Мои фиксации видны в F, как обычно, но я не вижу никаких новых ветвей в F. Поэтому, возможно, F не синхронизировался с O.

Так что мне не хватает и как это сделать?

ответ

1

Только ветви, которые вы нажимаете на репо, видны в F. Так как вы только толкали ведущий ответвление, только то, что будет видно в F.

Если вы хотите, чтобы увидеть все ветви от O в F, вы должны оформить каждую ветку, а затем вставьте его в F.

Пример для филиала под названием развивать:

git checkout develop 
git push origin develop 

Сделайте это для всех ветвей от O, что вы хотите видеть в F.

Если вы запустите git branch -a на местном уровне, он отобразит все локальные и удаленные ветви. Вы заметите, что ветки от O показаны только в форме remotes/upstream/develop, и для этого нет локального филиала. Команда git fetch, которую вы запускали ранее, вытащила все удаленные ветви, но не создала для них локальные ветви.

Вышеуказанные команды сначала создают локальную ветку из ветви вверх по течению, а затем нажимают их на свой собственный пульт.

Еще одна вещь: используйте только rebase, если вы не нажали на свою ветку на свой пульт. Повторное объединение нескольких раз и нажатие между ними изменят историю вашего филиала, и вам нужно будет заставить push ваши изменения. Пока вы используете только репо, это не проблема, но будут проблемы, когда другие люди уже поменяют ваши изменения. Повторное и принудительное изменение ваших изменений после этого вызовет проблемы для других, использующих ваше репо.

Вместо того, чтобы сбрасывать, вы можете объединиться в этом случае. Я использую этот псевдоним для обновления своей вилки с помощью пульта дистанционного управления:

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

Эй, спасибо за ответ. Но не следует ли команде git fetch вверх по течению привести все удаленные ветви к L, и, таким образом, толчок должен вытолкнуть ветвь на F? – rahulserver

+0

Когда вы нажимаете, вы только нажимаете текущую ветку (или ту, которую вы указываете в команде push). Он автоматически не будет создавать локальные ветви. Вы все равно должны сначала создать локальную ветвь, а затем нажать ее. – nwinkler

+0

Спасибо, человек! вы сделали день для меня – rahulserver

Смежные вопросы