При изменении ветки в Eclipse с помощью команды Team > Switch To > Other...
отображается Remote Tracking
, я выбираю филиал, который хочу оформить.
Обычно это приводило к проверке ветки как новой локальной ветки, где я также мог напрямую фиксировать изменения и объединять другие ветки с этой веткой.
Однако ветка каким-то образом проверяется как нелокальная ветка, и я не могу зафиксировать ее и не могу объединить с ней другие ветки.
Как вернуть старое поведение, когда удаленная ветка автоматически проверяется как новая локальная ветка?
@TTT Это не вопрос о командной строке Git, которая здесь может быть даже недоступна.
В диалоговом окне «Ветви» (которое отображается в разделе «Команда» > «Переключиться на > Другое...»), когда я выбираю ветку в разделе «Удаленное отслеживание» и нажимаю «Оформить», меня спросят, и я могу выбрать «Извлечь как новую локальную ветвь» (что это то, что вам нужно), проверьте Commit (который вы могли выбрать по ошибке) или_Cancel_.
@howlger, спасибо, у меня по какой-то причине нет дополнительного диалогового окна «Оформить как новую локальную ветвь». Однако я нашел обходной путь, выбрав «Новая ветка...», где автоматически выбирается тот, который выбран из удаленного отслеживания.
@howlger Приятно знать, что он полностью автономен и в системе может отсутствовать командная строка Git. Что касается сценария ОП, блокирует ли затмение фиксацию и слияние при отсоединении?
@TTT Нет. Когда вы извлекаете удаленную ветку, вас спросят: «Извлечь как новую локальную ветку» (это то, что вам больше всего нужно) или «Извлечь зафиксировать». Этот диалог отображается по умолчанию, но его можно отключить (не рекомендуется, но здесь произошло именно это). Без этого диалогового окна он менее интуитивен (как и командная строка Git): разные команды для достижения одной и той же цели (локальная ветка с определенной удаленной веткой в качестве восходящей) в зависимости от того, выбираете ли вы локальную или удаленную ветку.
@TTT Та же проблема в командной строке Git, но без интуитивного решения: stackoverflow.com/a/1783426/6505250 (11696 голосов!).
@howlger Я согласен, что при наличии нескольких пультов извлечения копии удаленной ветки из командной строки не интуитивно понятно. Я бы сказал, что вероятность случайного отключения от командной строки, вероятно, выше, чем при использовании пользовательского интерфейса, который может запросить это. Я думаю, что этот вопрос и ответ объясняют, как предотвратить отсоединение, однако мне больше любопытна эта часть вопроса: «Однако ветка каким-то образом проверяется как нелокальная ветка, и я не могу ее зафиксировать. и не могу объединить с ним другие ветки." Я не понимаю, почему OP не может зафиксировать или объединиться в отсоединенном состоянии.
@TTT Вам нужно сначала создать локальную ветку, чтобы иметь возможность фиксировать или объединять, не так ли?
@howlger Совсем нет. Ветви — это просто именованные указатели на идентификатор фиксации. Если хотите, вы можете работать полностью независимо и позже указать ветку на коммит. Я намеренно отсоединяю и удаляю свою текущую ветку всякий раз, когда завершаю работу над функцией, чтобы позже, когда я вернусь, показать себе, что у меня нет ничего, что мне нужно сохранять, и я готов начать все заново. Когда я возвращаюсь, иногда я просто начинаю программировать, оставаясь отстраненным. Я также тестирую слияния в отсоединенном состоянии, поэтому у меня нет дополнительных затрат на создание и удаление временной ветки до и после теста. При этом я сомневаюсь, что многие люди так делают.
@TTT Спасибо, я понимаю. Вы также можете сделать это в Eclipse, но при проверке коммита вы по умолчанию получаете следующее предупреждение «Detached HEAD», которое можно подавить: «Вы находитесь в состоянии «отсоединенный HEAD». Это означает, что у вас нет локальная ветка извлечена. Вы можете осмотреться, но фиксировать изменения не рекомендуется. Причина в том, что эти коммиты не будут ни в одной ветке и не будут видны после извлечения другой ветки. Если вы хотите внести изменения, создайте или. сначала загляните в местный филиал». Вы не можете нажать отсоединить HEAD, верно?
@howlger, ты можешь «вроде как» толкнуть оторванную голову. На самом деле вам не нужна локальная ветка, но вам понадобится удаленная ссылка для отправки. Подробности, особенно примечание, смотрите в этом вопросе и ответе.
Выбор «Отдельного HEAD и извлечения ветки удаленного отслеживания» решает проблему, и я могу извлечь удаленную ветку как новую локальную ветку.
В Git, если вы не находитесь в ветке, вы находитесь в отключенном режиме. Вы можете подтвердить это из командной строки, набрав
git status
. Однако даже в отдельном режиме вы все равно можете создавать новые коммиты и выполнять слияния. Я не могу придумать причину, по которой Eclipse блокирует эти операции во время отсоединения, поэтому я чувствую, что, возможно, происходит что-то еще, блокирующее пользовательский интерфейс, например, вы находитесь в процессе слияния или какой-либо другой операции? (git status
тоже может помочь вам это подтвердить.)