web-dev-qa-db-ja.com

「git add --patch」で新しいファイルを含めますか?

git add -pを実行すると、gitが新しく作成したファイルを選択するハンクとして選択する方法はありますか??

したがって、foo.Javaという新しいファイルを作成してからgit add -pを実行すると、そのファイルのコンテンツを選択してインデックスに追加することはできません。

88
Alexander Bird

すべての新しいファイルでこれを行うには、次を実行できます。

git add -N .
git add -p

頻繁に使用する場合は、~/.bashrc

alias gapan='git add --intent-to-add . && git add --patch'

N.B:空の新しいファイルでこれを使用すると、gitはパッチを適用できず、次のファイルにスキップできません。

48
Ulysse BN

新しいファイル(追跡されていないファイル)で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にハンクを編集するよう指示すると、選択したエディターにドロップして、変更を加えることができます。すべての行の先頭に+を付ける必要があり、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
104
CatShoes

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

(実際のコマンドには、ここでカットアンドペーストできない色があるため、見た目よりも優れています)

実際、git add -iの-​​p atchコマンドはgit add -pと同じなので、2番目は最初のサブセットです(私はadd -pが大好きだと認めていても) add -i自分が嫌いです!)。

3
Matthieu Moy

--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
2
doublejosh