Перенести незафиксированные изменения из текущей ветки в другую ветвь, которая конфликтует с этими изменениями
Предположим, что я на ветке master
, и я начинаю вносить некоторые изменения.
Я вношу изменения в файл, который уже открыт в Emacs (поэтому под капотом, когда происходят проверки, Emacs не знает, если я не вернусь-буфер постоянно).
Файл существовал в ветке other_branch
, который позже должен был быть объединен с master
. Но файл не существовал в master
, пока я случайно не сохранил его из Emacs.
Изменения не завершены, но я понимаю, что я не должен был вносить изменения в master
и планировал проверить другую ветку перед началом изменений.
Я не хочу потерять текущую работу, но также не хочу передавать ее master
.
Я попытался использовать git stash
, за которым следует git checkout other_branch
, но это дает мне ошибку, говоря, что из-за незафиксированных изменений мне не разрешено переключать ветки на other_branch
:
[email protected]:~$ git checkout other_branch
error: The following untracked working tree files would be overwritten by checkout:
some_file
Please move or remove them before you can switch branches.
Aborting
Файлы, которые я начал (случайно) изменяя в master
, уже существуют в other_branch
, поэтому просто проверка other_branch
приведет к уничтожению моей копии рабочего каталога, с изменениями, правильно?
Я попробовал stash
, который, похоже, зачеркнул изменения, но затем я получил сообщение об ошибке выше, когда я пытался проверить.
Резюме
-
проверить новую ветвь, other_branch
отслеживание master
.
-
создайте новый файл test.txt
в other_branch
и откройте его для редактирования в Emacs. Зафиксируйте other_branch
.
-
обратно в терминал, мастер проверки.
-
Вернувшись в Emacs, вы забыли, что теперь находитесь на хозяине, внесите некоторые изменения в test.txt
и сохраните файл. Это абсолютно новый файл, относящийся к master
.
Как вы можете получить эти изменения в other_branch
?
Ответы
Ответ 1
Если во время проверки не обнаружены неиспользуемые файлы, возможно, вы можете попробовать:
git stash --include-untracked
На странице git stash
:
Если используется опция --include-untracked
, все незатребованные файлы также сбрасываются, а затем очищаются с помощью git clean
, оставляя рабочий каталог в очень чистом состоянии
Так как это тоже не сработает (на приставке), вы можете указать:
- Сделать сообщение (в главной ветке)
- оформление заказа и вишня, которые фиксируют
- для управления и reset до
HEAD~
Ответ 2
Временно переименовать файл?
$ mv test.txt test.txt.tmp
$ git checkout other_branch
$ mv test.txt.tmp test.txt
Проверить изменения и зафиксировать
Ответ 3
Что сработало для меня, было следующее:
От master
do git add
для неперехваченного конфликтующего файла. Теперь, когда он отслеживается, выполните git stash
и checkout other_branch
. Теперь git stash pop
попытается объединить версию tracked-in-stash с версией tracked-in other_branch
. Вероятно, это создаст конфликт слияния, поэтому вы должны открыть файл и разрешить любые конфликты, и обязательно git add
и commit
их на other_branch
. Затем вернитесь к master
и просто убедитесь, что файлы не поставлены для фиксации и не присутствуют в этой ветке.
Это позволяет обрабатывать их так, как если бы их отслеживали в кошельке, но без фактического фиксации и слияния с мастером.