13

質問:
ステージング領域にいくつかのファイルを追加しました。この情報を一時的に保存したい。方法?

背景:
時々、より大きなリファクタリングを実行します。完全な結果をコミットすることだけが本当に意味があります。
このリファクタリング中に、独立してコミットしたいいくつかの無関係な変更も行います。
たとえば、リファクタリングによってメソッドの名前が変更されました。無関係な変更により、同じクラスの別のメソッドの 1 つのパラメーターのスペル ミスが修正されました。
ここで、事前に無関係な変更の 1 つをコミットするのを忘れていたことに気付いたときに、ほとんどのファイルをステージング領域に追加したとします。
ステージング領域へのファイルの追加には時間がかかります。すべてのファイルをチェックして、本当に必要なものだけをコミットしていることを確認するためです。そのため、単にステージング領域からそれらをすべて削除することは解決策ではありません.
代わりにやりたいこと:

  1. ステージング領域の現在の状態を保存します
  2. ステージングされたすべてのファイルを削除する
  3. 無関係な変更をステージングする
  4. 無関係な変更をコミットする
  5. 保存された状態をステージング領域に再適用します。

これはどういうわけか可能ですか?

別の解決策は複数のステージング エリアの可能性ですが、それは不可能だと思います。

4

5 に答える 5

15

次の一連のコマンドでうまくいくはずです

git commit -m "temporary" # save current stage are as an actual commit
git commit unrelated_files -m "The other feature"
git stash # hide the rest
git rebase -i HEAD~2 # change the order of two last commits
git reset HEAD^ # rollback the "temporary" commit
git add . # add everything from that commit back to staging
git stash pop # and return back all initially unstaged stuff
于 2013-02-23T12:32:53.000 に答える
2

あなたは間違いなく必要ですgit stash

これにより、現在の作業が保存され、HEAD にリセットしたかのようにディレクトリが残ります。ブランチを切り替えて、別のトピックで作業を行うことができます。

機能に再び取り組む準備ができたら、隠した変更を再適用しますgit stash apply

複数のスタッシュを組み合わせてgit stash list一覧表示し、適用するものを選択できます。git stash apply @{1}

編集 :

@nevik-rehnel がコメントで述べたように、インタラクティブな追加も使用できます。

すべてのステージングを解除し、関係のない変更をステージングするために使用git add -pし、コミットしてから、すべてを再ステージングします。

于 2013-02-22T09:07:58.883 に答える
1

ブランチとして保存して新しいブランチを開始できないのはなぜですか

于 2013-02-23T12:15:38.647 に答える
0

これはうまくいったようです:

  • git commit -m "temp"
  • git スタッシュ -u
  • git リセット HEAD^
  • git stash save "MeepMeep!"
  • git stash pop stash@{1}
于 2013-11-05T17:56:46.500 に答える