Как создать патч без коммита в Git - PullRequest
35 голосов
/ 21 марта 2012

Я сделал поиск в Интернете. Я знаю, что вы можете использовать format-patch после коммита, но моя ситуация немного другая.

Я хочу создать патч, похожий на «dpk» в SVN, чтобы я мог отправить его на проверку кода, но пока не хочу его фиксировать.

Как мне добиться этого с помощью Git?

Ответы [ 5 ]

104 голосов
/ 24 февраля 2014

Когда другие парни уже дали какой-то ответ, который соответствует соглашению с git, вопрос OP, «создать патч без фиксации», также может быть решен следующим образом:

git diff > my_patch.txt

Позже вы можете применить этот патч, также без коммита:

git apply my_patch.txt

Но если вы работаете только локально, git checkout another_branch -m достаточно, чтобы перенести все ваши текущие незафиксированные изменения в этот another_branch, даже без патча и применения.

7 голосов
/ 27 февраля 2016

общий шаг для генерации патча без фиксации наконец

  1. зафиксируйте свои локальные изменения, используя

    git commit -a -m "specific message"
    

    Примечание: не нажимайте этот коммит.

  2. сгенерировать патч

    git format-patch -s -n -1 HEAD   
    

    сгенерирует 0001-.patch

  3. вернуть обратно локальный коммит

    git reset --soft HEAD~1
    

    чтобы удалить коммит, но сохранить работу

    git reset --hard HEAD~1
    

    чтобы удалить коммит с вашей работой

6 голосов
/ 21 марта 2012

Фиксация в Git - это дешевая и полностью локальная операция, поэтому нет причин избегать фиксации, если вы ее нигде не нажимаете.

Просто создайте новую локальную ветку и зафиксируйте там свои изменения,Вы всегда можете удалить ветку позже, если она вам больше не нужна, или вы можете оставить ветку и использовать ее для работы над тем, что вы делаете, а затем объединить (или перебазировать) ее с основной веткой, когда она будет готова.Это хороший рабочий процесс для работы с Git.

$ git checkout -b feature-foo  # create and switch to new branch feature-foo
$ git commit

# do whatever you need to do

$ git checkout master          # switch back to the master branch
$ git merge feature-foo        # merge your change into master (optional)
$ git branch -d feature-foo    # delete the branch
5 голосов
/ 21 марта 2012

Как сказал @hammar, коммит дешев, и тогда вы можете сдуть коммит с помощью git reset и т. Д.

Вы также можете спрятать и затем сделать:

git stash show -p
0 голосов
/ 21 марта 2012

Фиксация локального репо в git не является «привязкой». Вы можете зафиксировать свои изменения, создать свой патч, а затем выполнить программный сброс в своей ветке до предыдущего коммита, и это похоже на то, что ваш коммит никогда не происходил.

Как говорится, на самом деле нет причин, по которым вы ДОЛЖНЫ сбрасывать ветку после создания патча. Вы можете оставить коммит в репозитории и просто не нажимать его, пока не закончится проверка кода. Если вам нужно вернуться и внести изменения в исходный коммит, у вас есть варианты на этом этапе.

И если вы создаете ветку для коммита, как подсказывает Хаммар, вам будет еще проще вернуться назад и внести изменения позже, не делая никаких раздражающих перебазировок и тому подобного в основной ветке перед нажатием.

...