web-dev-qa-db-ja.com

Gitでコミットせずにパッチを作成する方法

オンラインで検索しました。コミット後にformat-patchを使用できることは知っていますが、私の状況は少し異なります。

SVNの「dpk」に似たパッチを作成したいので、コードレビュー用に送信できますが、まだコミットしたくありません。

Gitでこれを達成するにはどうすればよいですか?

38
doglin

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
7
hammar

他の人がすでにgit規約に準拠した答えを出していた場合、OPの質問「コミットせずにパッチを作成する」もこの方法で解決できます。

git diff > my_patch.txt

後でコミットすることなく、このパッチを後で適用できます:

git apply my_patch.txt

ただし、ローカルで作業している場合は、git checkout another_branch -mは、パッチを適用せずに、現在のすべてのコミット解除の変更をanother_branchにもたらすのに十分です。

110
RayLuo

最後にコミットせずにパッチを生成する一般的な手順

  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
    

    あなたの仕事でコミットを削除するには

8
Pintu Patel

@hammarが言ったように、コミットは安いので、git resetなど.

隠してから実行することもできます:

git stash show -p
6
manojlds

Gitのローカルリポジトリへのコミットは「バインド」ではありません。変更をコミットし、パッチを作成してから、ブランチで以前のコミットにソフトリセットを行うことができます。これは、コミットが発生しなかったようなものです。

そうは言っても、パッチを作成した後にブランチをリセットする必要はありません。リポジトリにコミットを残したまま、コードのレビューが完了するまでプッシュを避けることができます。元のコミットに戻って変更を加える必要がある場合は、その時点でオプションがあります。

そして、hammarが示唆するようにコミット用のブランチを作成すると、プッシュする前にメインブランチで迷惑なリベースなどを行うことなく、戻って後で変更することがさらに簡単になります。

1
mockobject