Как создать патч без фиксации в Git
Я сделал поиск в Интернете. Я знаю, что вы можете использовать format-patch после фиксации. Но моя ситуация немного отличается.
Я хочу создать патч, подобный "dpk" в SVN. Поэтому я могу отправить его для проверки кода. Но я еще не хочу его совершать.
как это сделать в GIT? любые GURU?
Ответы
Ответ 1
Фиксирование в 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
Ответ 2
Когда другие ребята уже дали какой-то ответ, который соответствует соглашению git, вопрос OP, "создать патч без фиксации", также можно решить следующим образом:
git diff > my_patch.txt
Позже вы можете применить этот патч, также без фиксации, посредством:
git apply my_patch.txt
Но если вы просто работаете локально, git checkout another_branch -m
достаточно хорош, чтобы привести все ваши текущие uncommit изменения в этот another_branch, даже без патча и применения.
Ответ 3
общий шаг для создания патча без фиксации наконец
-
скопируйте локальные изменения, используя
git commit -a -m "specific message"
Примечание: не нажимайте эту фиксацию.
-
создать патч
git format-patch -s -n -1 HEAD
он будет генерировать 0001-.patch
-
вернуть обратно локальную фиксацию
git reset --soft HEAD~1
удалить фиксацию, но сохранить свою работу
git reset --hard HEAD~1
чтобы удалить фиксацию с вашей работой.
Ответ 4
Как и @hammar, фиксация будет дешевой, а затем вы можете снести фиксацию с помощью git reset
и т.д.
Вы также можете запрограммировать и выполнить следующее:
git stash show -p
Ответ 5
Передача локального репо в git не является обязательной. Вы можете зафиксировать свои изменения, создать свой патч, а затем сделать мягкую reset в своей ветке предыдущей фиксации, и это похоже на то, что ваша фиксация никогда не происходила.
При этом, действительно, нет причин, по которым вы должны иметь reset свою ветку после создания патча. Вы можете оставить фиксацию в репо и просто не нажимать ее, пока не будет проведен обзор кода. Если вам нужно вернуться и внести изменения в первоначальную фиксацию, у вас есть варианты в этой точке.
И если вы создаете ветвь для фиксации, поскольку hammar предлагает, чтобы было еще проще вернуться назад и внести изменения позже, не делая никаких раздражающих перегибов и таких в основной ветке до нажатия.