web-dev-qa-db-de.com

'git add --patch' um neue Dateien aufzunehmen?

Wenn ich git add -p, gibt es eine Möglichkeit für Git, neu erstellte Dateien als Hunks auszuwählen?

Also, wenn ich eine neue Datei namens foo.Java, dann führe git add -p aus. git lässt mich nicht den Inhalt dieser Datei auswählen, der in den Index aufgenommen werden soll.

88
Alexander Bird

Dazu können Sie mit jeder neuen Datei Folgendes ausführen:

git add -N .
git add -p

Wenn Sie es häufig verwenden möchten, können Sie einen Alias ​​in Ihrem ~/.bashrc Erstellen:

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

N.B: Wenn Sie dies mit einer leeren neuen Datei verwenden, kann git diese nicht patchen und mit der nächsten fortfahren.

48
Ulysse BN

Wenn ich git add -p someNewFile.txt Für eine neue Datei (eine nicht verfolgte Datei) ausprobierte, gab git einfach No changes. Aus und hielt an. Ich musste git sagen, dass ich die neue Datei zuerst verfolgen wollte.

git add -N someNewFile.txt
git add -p

Da die Datei jedoch nicht nachverfolgt wurde, wurde sie als ein riesiger Block angezeigt, der nicht aufgeteilt werden konnte (weil alles neu ist!). Also musste ich das Stück in kleinere Teile zerlegen. Wenn Sie damit nicht vertraut sind, überprüfen Sie diese Referenz , um zu beginnen.

Update - Hunk Bearbeitungsinfo Ich wollte dies aktualisieren, falls der obige Verweis wegfällt. Weil die neue Datei ist Ohne Verfolgung zeigt git add -p jede Zeile in der Datei als neue Zeile in einem Block an. Anschließend werden Sie gefragt, was Sie mit diesem Block tun möchten, und die folgende Eingabeaufforderung wird angezeigt:

Stage this hunk [y,n,q,a,d,/,e,?]?

Angenommen, Sie möchten nicht den gesamten Block (und damit die gesamte Datei) festschreiben, da ich nicht sicher bin, warum Sie in diesem Fall git add -p Verwenden möchten, möchten Sie die Option e auf angeben sag git, dass du das stück bearbeiten willst.

Sobald Sie git mitteilen, dass Sie den Block bearbeiten möchten, sollte er Sie in den Editor Ihrer Wahl verschieben, damit Sie Ihre Änderungen vornehmen können. Allen Zeilen sollte ein + Vorangestellt werden, und git enthält am Ende der Datei einige erläuternde Kommentare (mit einem # Vorangestellt). Löschen Sie einfach alle Zeilen, die Sie beim ersten Festschreiben der Datei nicht benötigen. Dann speichern und beenden Sie den Editor.

Gits Erklärung der Gits Hunk-Optionen:

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

Bei git add -p Geht es wirklich darum, Änderungen an bereits verfolgten Dateien hinzuzufügen.

Der Befehl zum interaktiven Auswählen der hinzuzufügenden Dateien lautet git add -i. Beispielsweise:

$ 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

(Der echte Befehl hat Farben, die ich hier nicht ausschneiden und einfügen konnte. Es ist also schöner, als es scheint.)

Eigentlich macht der p atch Befehl von git add -i Dasselbe wie git add -p, Also ist die zweite Teilmenge der ersten (obwohl ich zugebe, dass ich add -p Und hasse add -i Mich selbst!).

3
Matthieu Moy

Es gibt auch einen sehr ähnlichen Ansatz, der das --cached Flagge...

1) Verwandeln Sie Ihre nicht bereitgestellten Änderungen in bereitgestellte, genau wie Ihre hinzugefügte Datei.

git add edited-file.txt
git add new-file.txt
git add directory-of-changes/

2) Sehen Sie sich den Unterschied an (Hinweis: Sie können sowohl Bearbeitungen als auch neue Dateien hinzufügen).

git diff --cached

3) Erstellen Sie den Patch.

git diff --cached > my_patch_file.patch
2
doublejosh