4

1つのコミットを5つのコミットに分割しようとしています。私の計画はgit stash save -p、最初のコミットで必要なものを除いて、すべてを使用して隠しておくことでした。次に、変更をコミットgit stash applyし、2番目のコミットで必要なものを除いてすべてを隠します。それでも、元のコミットには新しく追加されたファイルが含まれており、-pを使用して隠したいものを選択できず、追跡されていないファイルも隠しているようです。同時に-uを使用します。

$ git stash save -u -p "take 4"
Can't use --patch and --include-untracked or --all at the same time

これを行う方法はありますか?

4

2 に答える 2

3

これは、の教科書のユースケースですgit add -p

以下をせよ:

  • 分割するコミットを確認してください。
  • git reset HEAD~。これにより、変更を失うことなくコミットが「元に戻され」ます。それらは、ステージングされていない作業ツリーにあります。
  • 五回:
    • git add -p(そして、この「フェーズ」で必要な変更を追加します)。git add元のコミットで追加されたファイルは、それらを含めるパッチに到達したときに必要になります。
    • 必要に応じて、コミットしようとしていることを確認しgit diff --stagedたり、コミットしようとしていないgit diffことを確認したりできます。
    • git commit

これにより、5つの個別のコミットが提供されます。git add -iまたは、の代わりに使用することもできますgit add -p。このユースケースは、を対象としたものではありませんgit stash

これが機能する方法は、Gitの「ステージング領域」(「インデックス」とも呼ばれます)を利用することです。作業コピーに変更が散らかっています。git add変更を「ステージング」するために使用します。次にgit commit-aフラグなしで)段階的な変更のみをコミットします。

于 2013-03-25T17:04:07.463 に答える
0

述べgit add -pたように、それは間違いなく元の問題に取り組む方法です。

ただし、二次的な問題に関しては、次のようになります。

Can't use --patch and --include-untracked or --all at the same time

私の場合、追跡されていないファイルをいくつか含めたいと思いましたが、-patchを使用して追跡されたものを選択して隠しておきましたこれらの組み合わせを「diffA」と呼びましょう。私がしたことは、最初に逆セットを実行することでした。diffAに属していないコードを隠し、git add the_untracked_fileそれによって使用方法がクリアされ、git stash push追跡されたものと追跡されていないものの両方が1つの隠し場所になりました。

于 2021-11-19T17:10:52.710 に答える