web-dev-qa-db-ja.com

Git:Stage into Commit、正しいワークフローは何ですか?

いくつかの別々のコミットでコミットしたい大きなコードを作成しました。
したがって、すべての変更がコミットされるまで、関連する部分のステージング、コミット、ステージング、コミットなどを行うことができます。

欠けている部分は、コミットを正しく分割したかどうかをテストする方法です。
つまりステージング領域にある部分が少なくともコンパイルされるかどうか?

そのためには、後でコミットする変更を失うことなく、何らかの方法で作業ツリーをインデックス(ステージング領域)と同期させる必要があります。

それを行うためのright方法は何ですか?
それを行うための最も速い方法は何ですか?

更新:
magitでそれを行う方法は?

21
Łukasz Lew

あなたはそれを行うことができます:

$ git branch task1 # first set of commit to do

中間ブランチは、コンテンツをインデックスにゆっくりと追加するときに、いくつかの中間コミットを記録するのに役立ちます。

次に、 追加するための対話型セッション 必要なものを試してください。

$ git add -i

追加した内容を確認したいときはいつでも追加してください。

$ git stash --keep-index

コンパイルする場合は、現在の作業をgit commitし、task1がまだ完了していない場合は、git stash popを実行して、作業ツリー全体を復元し、繰り返します。

task1が完全にベイク処理されたら、 すべての 'task1'コミットをトリム 、マスター内のすべての作業をマージできます。

$ git checkout master
$ git merge task1
$ git branch -D task1 # no need for that intermediate branch

重要なtask1コミットの履歴を保存したい場合は、mastertask1にマージする前に、最初にtask1をマスターの上にリベースできます(早送り)

最後に、スタッシュにまだ進行中の作業が含まれている場合は、task2に対してすべてのプロセスを繰り返します。

16
VonC

これが私が使用するmagitの方法です:

  • hunk/files/regionをステージングまたはアンステージングするためにmagit "u"または "s"を使用して最初のコミットのインデックスを作成します。 (これはgit guiでも実行できます)。インデックスをコミットする準備ができたら:
  • 「c」でコミットし、コミットメッセージを書き込み、Ctrl-CCtrl-Cでコミットします。
  • 「z」の後に<< Enter >>を付けて隠します。これにより、すべての変更が隠されます。変更を元に戻すには、ポインタが正しいスタッシュエントリにあるときに「A」を使用できます。

テストを行って、コミットが適切かどうかを確認します。変更が必要な場合は、前と同じようにやり直しますが、コミットメッセージの画面でコミットする前にCtrl-CCtrl-Aを押します。これにより、新しいコミットを作成する代わりに、最後のコミットが修正(完了)されます。

後で、あるコードが最後に実行する前のコミットを修正する必要があることがわかった場合は、コードをそれ自体で(一時的な要約とともに)コミットし、「L」のおかげで正しいコミットに折りたたむ必要があることに注意してください。 「ログ画面にアクセスし、両方のコミットの前にポインタをポイントして、スキッシュし、「E」を押して「gitrebase-i」セッションを開始します。一時的な要約がターゲットのコミットを「修正」するように、コミットを並べ替えます。バッファとTADAを終了します。すべて完了です。

0
vaab