У меня есть проект с несколькими ветками. Я размещал их на GitHub, а теперь, когда над проектом работает кто-то еще, мне нужно вытащить их ветки с GitHub. Это прекрасно работает в master. Но, скажем, кто-то создал ветку xyz
. Как я могу получить ветку xyz
с GitHub и объединить ее с веткой xyz
на моем localhost
?
На самом деле я нашел ответ здесь: https://stackoverflow.com/questions/1072261/push-and-pull-branches-in-git
Но я получаю ошибку "! [rejected]" и что-то о "небыстрой перемотке".
Есть предложения?
но я получаю сообщение об ошибке " у! [отклонено]" и что-то о том, что "не перемотка вперед"и
Что's, потому что Git может'т слияние изменений из ветки в текущий мастер. Позвольте'говорят, что вы'вэ проверили филиал "Мастер", и вы хотите объединить в удаленный филиал `другие-ветви. Когда вы сделаете это:
$ git pull origin other-branch
Git-это в основном этим:
$ git fetch origin other-branch && git merge other-branch
То есть, "тянуть" - это только "взять" последовало "слияние". Однако, когда тянуть
-Инг, git будет только слияние других-филиала if он может выполнять перемотка вперед слияние. В перемотка вперед слияния-это слияния, при которых руководитель филиала вы пытаетесь слиться это прямой потомок руководителя филиала, который вы хотите объединить. Например, если у вас есть это дерево истории, то сливаясь в других-филиала приведет к быстрому прямому слиянию:
O-O-O-O-O-O
^ ^
master other-branch
Однако, это не быть однопроходного слияния:
v master
O-O-O
\
\-O-O-O-O
^ other-branch
Чтобы решить вашу проблему, сначала принести удаленной ветки:
$ git fetch origin other-branch
Затем объединить его с вашей текущей веткой (я'МР предположить, что'ы Мастер
), и исправить любые конфликты слияния:
$ 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
Когда вы находитесь на ветке master, вы также можете сначала проверить ветку, например:
git checkout -b xyz
Это создаст новую ветку "xyz" от мастер-ветки и напрямую проверит её.
Затем вы делаете:
git pull origin xyz
Это перетягивает новую ветку в вашу локальную ветку xyz
.
Лучшим способом является:
git checkout -b <new_branch> <remote repo name>/<new_branch>
`Git для выборки будет захватить последний список филиалов.
Теперь вы можете ГИТ MyNewBranch кассе
Сделано :)
Дополнительные сведения см. В разделе "Документы": ГИТ выборки
Я не уверен, что полностью понимаю проблему, но извлечение существующей ветки делается следующим образом (по крайней мере, это работает для меня :)
git pull origin BRANCH
Это предполагает, что ваша локальная ветка создана на основе origin/BRANCH.
Это помогло мне получить удаленную ветку до присоединения ее к другой:
git fetch repo xyz:xyz
git checkout xyz
git pull <gitreponame> <branchname>
Как правило, если у вас есть только РЕПО присваивается свой код, то gitreponame будет происхождения.
Если вы работаете на двух РЕПО's, как один местный и еще один пульт, как вы можете проверить РЕПО's список от Git удаленного -в. это показывает, как много РЕПО'ы назначаются на вашего текущего кода.
BranchName должны существовать в соответствующие gitreponame.
вы можете использовать следующие две команды, чтобы добавить или удалить РЕПО'ы
git remote add <gitreponame> <repourl>
git remote remove <gitreponame>
Проще говоря, если вы хотите вытащить из GitHub the_branch_I_want филиал``:
git fetch origin
git branch -f the_branch_I_want origin/the_branch_I_want
git checkout the_branch_I_want
вы также можете сделать
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.
Когда я использовал версии, он сказал, 'роковой: не допустимое имя объекта: 'вверх по течению/remote_branch_name''. Я не сделал Git для выборки происхождения
в качестве комментария предложил, но вместо того, чтобы просто заменить вверх по течению
с происхождения
. Я предполагаю, что они эквивалентны.