Я внес некоторые изменения в свою ветку и понял, что забыл, что я спрятал некоторые другие необходимые изменения в этой ветке. То, что я хочу, - это способ объединить мои скрытые изменения с текущими изменениями.
Есть ли способ сделать это?
Это больше для удобства, в конце концов я сдался и зафиксировал сначала свои текущие изменения, а затем свои скрытые изменения, но я бы предпочел ввести их одним махом.
Ответы:
Я только что обнаружил, что если ваши незафиксированные изменения будут добавлены в индекс (т. Е. «Поэтапно», используя
git add ...
), тоgit stash apply
(и, по-видимому,git stash pop
) на самом деле произойдет правильное слияние. Если нет конфликтов, ты золотой. Если нет, разрешите их, как обычноgit mergetool
, с помощью редактора или вручную.Чтобы было ясно, это процесс, о котором я говорю:
... что, вероятно, то, что вы ищете.
ТЛ; др
Беги
git add
первым.источник
git stash apply --force
или что-то.git add .
,git stash apply
затемgit reset
применил тайник к своим рабочим изменениям и слился, не делая коммитов.Запуск
git stash pop
илиgit stash apply
по сути слияние. Вам не нужно было фиксировать текущие изменения, если только файлы, измененные в тайнике, также не были изменены в рабочей копии, в этом случае вы бы увидели это сообщение об ошибке:В этом случае вы не можете применить тайник к вашим текущим изменениям за один шаг. Вы можете зафиксировать изменения, применить тайник, зафиксировать снова и раздавить эти два коммита, используя,
git rebase
если вы действительно не хотите двух коммитов, но это может быть больше проблем, чем оно того стоит.источник
git commit --amend
.Вот еще один вариант сделать это:
git stash show -p
покажет патч последнего сохраненного тайника.git apply
будет применять его. После того, как слияние завершено, слитое хранилище может быть сброшеноgit stash drop
.источник
git stash pop
не просто сделать это в тех случаях, когда слияние чисто применяется ...git stash show -p --no-color | git apply --3way
(--3way
= отступить при трехстороннем слиянии в случае неудачи патча).git stash show -p
создает разницу между сохраненным содержимым и фиксацией назад, когда запись в хранилище была создана впервые . Так что это перезапишет изменения рабочего файла, сделанные OP.git stash show -p
будет объединенgit apply
, если это возможно без конфликтов.То, как я это делаю,
git add
это сначала к этомуgit stash apply <stash code>
. Это самый простой способ.источник
Как подсказывает @Brandan, вот что мне нужно было сделать, чтобы обойти
Следуйте этому процессу:
И вы останетесь с полностью объединенными локальными изменениями
file
, готовыми выполнить дальнейшую работу / очистку или сделать один хороший коммит. Или, если вы знаете, что объединенное содержимоеfile
будет правильным, вы можете написать подходящее сообщение и пропуститьgit reset HEAD^
.источник
Может быть, это не самая плохая идея слияния (через difftool) из ... да ... ветви!
источник
ты можешь легко
источник
Другой вариант - сделать еще один «git stash» локальных незафиксированных изменений, а затем объединить два git stash. К сожалению, у git, похоже, нет возможности легко объединить два тайника. Таким образом, один из вариантов - создать два файла .diff и применить их оба - чтобы это не было дополнительной фиксацией и не требовало десятиэтапного процесса: |
как: https://stackoverflow.com/a/9658688/32453
источник