インターフェイス(IMooからIKey)とクラスファイル(MooからKey)の名前を変更しました。その後、クラスファイルにメソッド(blob())を作成し、インターフェイスに実装を作成しました。これらの2つの変更をgitで別々にコミットするにはどうすればよいですか?
そのため、最初のコミットには名前変更の変更のみが含まれ、2番目のコミットにはインターフェイスのメソッドと実装が含まれます。
すべてを組み合わせた後で変更を分離しようとするよりも、変更を加えるときに個別にコミットする方がはるかに簡単です。
つまり、インタラクティブなステージングなどをいじるよりも、最初の変更をやり直してコミットしてから、完全な変更を再適用する方が簡単な場合があります。
やり直しアプローチ
したがって、たとえば、現在の変更を保存して取っておくこともできます
git stash
次に、名前変更操作をやり直します。これは簡単なはずです。次に、
git add .
git commit -m "rename class and interface"
次に、完全な変更を元に戻します。起こりうる衝突を避けるために、私は次のようなことをします
git checkout HEAD^
git stash pop
git reset --mixed HEAD@{1}
これで、履歴に名前の変更が表示され、作業ツリーの残りの変更をステージングしてコミットする準備ができているはずです。
やり直しアプローチなし
上記は、クラスの名前変更を簡単にやり直すことができることを前提としています。これは、小さな変更(小さなコードベース、または影響を受けるクラスとインターフェイスを参照するコードベース全体の参照が少ないため)、またはIDEがそれを行うためです。あなた(そうでない場合は、より優れた開発ツールの使用を検討することをお勧めします)。しかし、もっと複雑な変更があった場合はどうなりますか?
理想的にはgit add -i
、対話型のステージングセッションを開始し、プロンプトを処理して、クラス名の変更が行われているが、新しいメソッドが行われていないことを指定することができます。それらは別々の変更ハンクでなければならないので、わかりました...
ただし、問題は、プログラミング言語とコードレイアウトによっては、クラスの名前を変更したときにファイルの名前を変更した可能性があることです。インタラクティブなステージングツールは、それをうまく処理できません。
だから、その場合には、あなたは、コミット戻って、前に行くことができるだけでインタラクティブなステージング操作を行い、その後、新しいコミットの上にあなたの変更を復元、その後、ファイル名を変更して、それをコミットします。しかし、それをすべて行うまでに、私の最初の提案のほぼすべてのステップに加えて、インタラクティブなリベースを完了しました。それでも、履歴には余分な/壊れた/おそらく不要なコミットが残っています(おそらく押しつぶしたい)...それで、ポイントは何ですか?
何らかの理由でこの方法で試してみたい場合は、およびオプションにgit add
関連するドキュメントを参照してください。https://git-scm.com/docs/git-add-i
-p
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加