26

2つの機能が追加されたソースファイルがあります。さくらんぼ狩りを可能にするために、機能ごとに1つずつ、合計2つのフェーズでコミットしたいと思います。これまで、同様の状況でgit add -p、ローカルファイルを最終段階に残したまま、1つの機能をコミットするのに役立ちました。

しかし、私は今、git add -p両方の機能の編集を含むハンクをステージングしたいという問題を抱えています。編集は別々の行にありますが、s(「分割」の場合)ハンクを小さな部分に分割する必要はありません...

つまり、2つの機能の変更をこのように分離することはできません。元のファイルを実際に変更せずに、たとえばviを使用してパッチを手動で編集する方法はありますか?

4

5 に答える 5

27

アランが言うように、の間にe(の代わりにs)を押してパッチを編集しgit add -pます。これにより、パッチのハンクを使用してエディターが起動し、手動で編集できるようになります。テキスト内には、変更を適切に破棄する方法を説明するコメントがあり、実際には非常に簡単です。

完了したら、を実行して追加した変更のみでテストできることに注意してくださいgit stash --keep-indexインデックスに追加しなかった変更は隠され、コミットしようとしている変更だけを自由にテストできるようになります。完了したら、単純に、git stash popまたはgit stash apply他の変更を元に戻します。

于 2010-02-25T12:28:13.530 に答える
6

他の人が言っているように、e分割したいハンクを編集するために使用できます。

ハンクの一部のみを追加するには、分割する変更から行を削除できます。

+Line 1
+Line 2
+Line 3

1行目と3行目を1つのコミットに、2行目を別のコミットに保持するとします。2行目を削除するだけです。

+Line 1
+Line 3

これにより、ライン1とライン3がステージングエリアに配置されます。2行目は引き続きインデックス付けされますが、ステージングされません。

于 2010-02-25T12:36:56.567 に答える
5

eを押してパッチを編集できますgit add -p。元のファイルには影響しません。

于 2010-02-25T12:17:40.783 に答える
1

ステージングする個々の行を選択できるGitGUIがあり、通常git add --patchはコマンドラインから通常の行を使用できない行を分割できます。

そのような2つのGUIは次のとおりです。

  1. SourceTree
  2. GitCola
于 2013-07-14T19:10:20.673 に答える
0

私は通常git stash pop、@Danの回答で説明されているマージの競合を取得します。競合を回避するソリューションについては、gitstashと編集されたハンクを参照してください。

于 2011-11-08T14:14:10.390 に答える