2012-03-21 4 views
24

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

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

Как я могу достичь этого с помощью Git?

+5

Одна из основной точки DVCS как git заключается в том, что нет причин вообще ничего не делать. –

+0

Никто не ответил на вопрос .. Он ничего не спрашивает о коммиттах .. Г-н спросил, как вы производите патч, который может быть распространен среди других пользователей. – Stephen

+0

Связанный: [git format-patch без коммитов] (http://stackoverflow.com/q/7837218/183120) – legends2k

ответ

7

Commit in 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 
+8

Не полезно. Иногда я хочу видеть локальные изменения перед фиксацией, чтобы я мог поймать вещи, которые я не собирался совершать. – Stephen

+5

Для этого вы можете использовать 'git diff'. – bfontaine

+3

@Stephen 'git add --patch' – sigod

1

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

Это, как говорится, действительно нет причин, по которым вы должны сбросить свою ветку после создания патча. Вы можете оставить фиксацию в репо и просто не нажимать ее, пока не будет проведен обзор кода. Если вам нужно вернуться и внести изменения в первоначальную фиксацию, у вас есть варианты в этой точке.

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

6

Как @hammar сказал, совершают дешев, а затем вы можете сдуть фиксации с git reset и т.д.

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

git stash show -p 
79

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

git diff > my_patch.txt 

Позже вы можете применить этот р ATCH, также без фиксации, с помощью:

git apply my_patch.txt 

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

+0

в случае, если вы хотите удалить этот прикладной патч: git apply -R my_patch.txt – Sourabh

+2

Нравится программа? Поделитесь с друзьями! Если вам нужно добавить новые файлы, вы должны добавить все файлы в индекс (git add), а затем в $ git diff --cached> my_patch.txt – dxvargas

+0

Это также не включает в себя поэтапные файлы. Вам нужно будет запустить 'git diff --staged> my_patch.txt', чтобы включить их –

7

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

  1. совершают локальные изменения с помощью

    git commit -a -m "specific message" 
    

    Примечание: не давите это совершить.

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

    git format-patch -s -n -1 HEAD 
    

    он будет генерировать 0001-.патч

  3. вернуться местным совершить

    git reset --soft HEAD~1 
    

    удалить фиксации, но сохранить свою работу

    git reset --hard HEAD~1 
    

    удалить совершить с вашей работой

Смежные вопросы