を実行するとgit add -p
、新しく作成したファイルをgitが選択するハンクとして選択する方法はありますか?
という名前の新しいファイルを作成してからfoo.java
git add -pを実行すると、インデックスに追加するファイルのコンテンツをgitが選択できなくなります。
を実行するとgit add -p
、新しく作成したファイルをgitが選択するハンクとして選択する方法はありますか?
という名前の新しいファイルを作成してからfoo.java
git add -pを実行すると、インデックスに追加するファイルのコンテンツをgitが選択できなくなります。
回答:
git add -p someNewFile.txt
新しいファイル(追跡されていないファイル)を試すと、gitは単に出力No changes.
して停止しました。最初に新しいファイルを追跡するつもりであるとgitに伝えなければなりませんでした。
git add -N someNewFile.txt
git add -p
ただし、ファイルは追跡されていないため、分割できない1つの巨大なハンクとして表示されます(すべて新しいため)。それで、私はハンクをより小さなビットに編集する必要がありました。これに慣れていない場合は、このリファレンスを参照して始めてください。
更新-ハンク編集情報
上記の参照がなくなる場合に備えて、これを更新したかった。新しいファイルは追跡されないため、ファイルのgit add -p
すべての行が1つのハンクの新しい行として表示されます。次に、そのハンクで何をしたいかを尋ね、次のプロンプトを表示します。
Stage this hunk [y,n,q,a,d,/,e,?]?
ハンク全体(つまり、ファイル全体をコミットしたくないので、なぜこのようなgit add -p
場合に使用するのかわからないため)を想定してe
、編集することをgitに伝えるオプションを指定する塊。
ハンクを編集することをgitに伝えると、選択したエディターにドロップされ、変更を加えることができます。すべての行の先頭にa +
を付ける必要があり、gitには#
ファイルの末尾にいくつかの説明コメント(プレフィックスは)があります。ファイルの最初のコミットで不要な行を削除するだけです。次に、エディターを保存して終了します。
gitのハンクオプションに関するGitの説明:
y - stage this hunk
n - do not stage this hunk
q - quit; do not stage this hunk or any of the remaining ones
a - stage this hunk and all later hunks in the file
d - do not stage this hunk or any of the later hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
k - leave this hunk undecided, see previous undecided hunk
K - leave this hunk undecided, see previous hunk
s - split the current hunk into smaller hunks
e - manually edit the current hunk
? - print help
git add -N someNewFile.txt
続くgit add -p
git add -p
本当に追跡済みのファイルに変更を加えることです。
追加するファイルを対話的に選択するコマンドはgit add -i
です。例えば:
$ git add -i
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
What now> a
1: another-new.java
2: new.java
Add untracked>> 2
1: another-new.java
* 2: new.java
Add untracked>>
added one path
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
What now> q
Bye.
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: new.java
Untracked files:
(use "git add <file>..." to include in what will be committed)
another-new.java
(実際のコマンドには、ここではカットアンドペーストできない色があるため、見た目よりも優れています)
実際には、p atchコマンドgit add -i
はと同じようgit add -p
に機能するため、2番目は最初のサブセットです(私add -p
はadd -i
自分が好きで嫌いだと認めていますが)。
No changes.
新しいファイルに出力されます。OPは、ファイル全体ではなく、新しいファイルからハンクを追加する方法を尋ねていました。--intent-to-add
ここでもまだ必要だと思います。
add -p
単独では機能しませんが、この回答はを示唆add -i
しています。
git add -i
ます。ただし、を使用して非対話的に同じことを行うことができますgit add -N
。
--cached
フラグを利用する非常に類似したアプローチもあります...
1)追加したファイルと同じように、ステージングされていない変更をステージングされた変更に変換します。
git add edited-file.txt
git add new-file.txt
git add directory-of-changes/
2)差分を確認します(注:編集と新しいファイルの両方を含めることができます)。
git diff --cached
3)パッチを作成します。
git diff --cached > my_patch_file.patch
git add -p
は、それがすべてを追加するわけではないということですが、追加したいものを選んで選択しましょう。このソリューションは盲目的にすべてを追加します。
git add -N
は、指定された追跡されていないファイルをインデックスに追加するだけで、コンテンツはありません。