Git вытащить определенную ветку из GitHub



У меня есть проект с несколькими ответвлениями. Я подталкивал их к GitHub и теперь, когда кто-то работает на них, нужно тянуть на GitHub. Он отлично работает в мастер. Но скажем, у меня есть филиал xyz. Как я могу вытащить ветку xyz из GitHub и объединить ее в ветку xyz на моем локальном хосте?



У меня на самом деле есть свой ответ здесь:
толкать и тянуть ветки в Git



но я получаю ошибку"! [отклонено] " и что-то о "non fast forward".



какие предложения?

1657   10  

10 ответов:

но я получаю ошибку"! [отклонено] " и что-то о "non fast forward"

это потому что Git не может объединить изменения из ветки в текущий мастер. Допустим, вы проверили филиал master, и вы хотите объединить в удаленной ветке other-branch. Когда вы делаете это:

$ git pull origin other-branch

Git в основном делает это:

$ git fetch origin other-branch && git merge other-branch

то есть, a pull это просто fetch затем merge. Однако, когда pull-Инг, ГИТ будет только слияние other-branchесли он может выполнять вперед слияние. А вперед слияние-это слияние, в котором глава ветви, в которую вы пытаетесь слиться, является прямой потомок руководителя филиала, который вы хотите объединить. Например, если у вас есть это дерево истории, то сливаясь other-branch приведет к быстрому слиянию:

O-O-O-O-O-O
^         ^
master    other-branch

однако, это было бы не быстро-прямое слияние:

    v master
O-O-O
\
 \-O-O-O-O
         ^ other-branch

, чтобы решить вашу проблему, сначала fetch удаленный филиал:

$ git fetch origin other-branch

затем объедините его в свою текущую ветку (я предполагаю, что это master), и исправить любые конфликты слияния:

$ git merge origin/other-branch
# Fix merge conflicts, if they occur
# Add merge conflict fixes
$ git commit    # And commit the merge!

просто отслеживать удаленные ветви явно и просто git pull будет делать только то, что вы хотите:

git branch -f remote_branch_name origin/remote_branch_name
git checkout remote_branch_name

или даже больше вписывается в GitHub документация по разветвлению:

git branch -f new_local_branch_name upstream/remote_branch_name

вы можете потянуть ветку к ветке с помощью следующих команд.

git pull {repo} {remotebranchname}:{localbranchname}

git pull origin xyz:xyz

когда вы находитесь на главной ветке, вы также можете сначала проверить ветку, например:

git checkout -b xyz

это создает новую ветвь, "xyz", от мастера и непосредственно проверяет его.

вы тут:

git pull origin xyz

это тянет новую ветку в локальном xyz филиала.

лучший способ-это:

git checkout -b <new_branch> <remote repo name>/<new_branch>

Я не уверен, что полностью понимаю проблему, но вытягивание существующей ветви делается так (по крайней мере, это работает для меня :)

git pull origin BRANCH

это предполагает, что ваша локальная ветвь создается из источника/ветви.

git fetch захватит последний список ветвей.

теперь вы можете git checkout MyNewBranch

готово :)


для получения дополнительной информации см. docs:git fetch

это помогло мне получить удаленную ветку, прежде чем объединить ее в другую:

git fetch repo xyz:xyz
git checkout xyz
git pull <gitreponame> <branchname>

обычно, если у вас есть только РЕПО, назначенное вашему коду, то gitreponame будет origin.

Если вы работаете на двух РЕПО, как один является локальным, а другой для удаленного, как вы можете проверить список РЕПО от git remote-v. это показывает, сколько РЕПО назначено вашему текущему коду.

BranchName должен существовать в соответствующем gitreponame.

вы можете использовать следующие две команды для добавления или удаления РЕПО

git remote add <gitreponame> <repourl>
git remote remove <gitreponame>

вы также можете сделать

git pull -r origin master

исправить конфликты слияния, если какие-либо

git rebase --continue

- r для перебазирования. Это сделает вас ветвь структуры от

        v  master       
o-o-o-o-o
     \o-o-o
          ^ other branch

до

        v  master       
o-o-o-o-o-o-o-o
              ^ other branch

это приведет к чистой истории. Примечание: в случае, если вы уже подтолкнули свою другую ветвь к источнику( или любому другому удаленному), вам может потребоваться принудительно подтолкнуть свою ветвь после перебазирования.

git push -f origin other-branch

Я

git branch -f new_local_branch_name origin/remote_branch_name

вместо

git branch -f new_local_branch_name upstream/remote_branch_name

как предложил @innaM. Когда я использовал вышестоящую версию, он сказал"fatal: not a valid object name: 'upstream/remote_branch_name". Я этого не делал git fetch origin в качестве комментария предложил, но вместо того, чтобы просто заменить upstream С origin. Я думаю, что они эквивалентны.

Comments

    Ничего не найдено.