Нажмите локальную ветвь Git в начало
Я работаю над двумя машинами и репо на исходном репо на третьем (происхождение доступно из двух других, без прямого соединения между машиной1 и машиной2).
# Machine 1
$ git branch
master
* testing
cms
# Machine 2
$ git branch
* master
Теперь я хочу направить ветвь testing
в начало координат и на машинке2 тоже, поэтому окончательный эффект будет следующим:
# Machine 2
$ git branch
* testing
master
Я пробовал:
# Machine 1
$ git push origin testing
# Machine 2
$ git pull origin testing # bunch of merge conflicts
$ git checkout -b testing origin/testing # errors too
Текущее состояние:
# Machine 1
$ git branch -r
origin/HEAD -> origin/master
origin/master
origin/testing
Как это сделать?
Мой следующий вопрос, вероятно, будет: как удалить ветвь origin/testing
?
Ответы
Ответ 1
Вы успешно перенесли ветвь тестирования в исходное состояние, так что теперь вам просто нужно получить ветвь machine2.
Не уверен в состоянии репо на machine2, поэтому я бы удалил каталог (или создаю новый для использования) и просто клонировал репо на Machine2 и проверил тестирование...
Итак, на Machine2 в пустой каталог (новый или чистый):
$ git clone [email protected]/somewhere
$ git branch
* master
$ git checkout testing
# ...
# something about getting and switching
# ...
$ git branch
* testing
master
Ответ 2
Вместо использования git pull
(который извлекает и объединяет) попробуйте git fetch
(который не будет пытаться объединиться с вашей текущей ветвью на machine2 и вызвать конфликты):
# Machine 1
$ git push origin testing
# Machine 2
$ git fetch origin testing
$ git checkout -b testing origin/testing
Ответ 3
Все, что вам нужно сделать, это следующее:
На машине 1 разверните удаленную ветку и привяжите к ней локальную ветвь тестирования:
git push -u origin testing
На машине 2 разверните локальную ветвь, связанную с ветвью удаленного тестирования:
git fetch origin && git checkout --track origin/testing
Теперь обе ветки локального тестирования должны быть развернуты и связаны с ветвью удаленного тестирования =)
Теперь для удаления удаленной ветки вы можете просто попробовать следующее:
git push origin --delete testing
или
git push origin :testing
Ответ 4
Оригинальный плакат гласит:
Мой следующий вопрос, вероятно, будет следующим: как удалить ветвь origin/testing
?
Вы должны четко понимать, что вы подразумеваете под этим, потому что после того, как вы нажмете testing
на удаленное репо, будет также локальная ветвь удаленного отслеживания origin/testing
, которая отслеживает последнего известного состояния ветки testing
на пульте дистанционного управления. Вы можете найти эту ветку удаленного отслеживания в .git/refs/remotes/origin/
.
Удаление удаленных testing
и локальных ветвей origin/testing
Если вы удалите ветку на пульте дистанционного управления с помощью следующих команд:
git push origin :testing
# Or
git push origin --delete testing
тогда локальная ветвь удаленного отслеживания origin/testing
также будет автоматически удалена.
Удаление только локальной ветки origin/testing
Если по какой-то причине вам просто нужно удалить локальную ветвь удаленного отслеживания origin/testing
, но не ветвь testing
на пульте дистанционного управления, вы можете запустить команду git branch -d
с помощью --remotes
или -r
:
git branch --delete --remotes origin/testing
# Or shorter
git branch -dr origin/testing
Если вы получите сообщение об ошибке, что ветвь не может быть удалена, поскольку она еще не была объединена, вы можете принудительно удалить ее, используя флаг -D
вместо --delete
или -D
.
См. также
Ответ 5
Мой следующий вопрос, вероятно, будет следующим: как удалить ветвь origin/testing?
Чтобы ответить на следующий вопрос: выходите из ветки, вы намерены удалить и запустить:
git branch -d < branch_name >
-d удалить полностью объединенную ветвь
-D удалить ветку (даже если она не объединена)