Wie kann ich nur einige Dateien festschreiben?

259

Ich habe zwei Projekte. Eines ist das "offizielle" Projekt und das zweite ist eine leichte Modifikation (einige Dateien hinzugefügt). Ich habe einen neuen Zweig erstellt und neue Dateien hinzugefügt. Während der Entwicklung werden jedoch einige Dateien geändert, die beiden Zweigen gemeinsam sind.

Wie kann ich nur diese Dateien festschreiben?

Nips
quelle
Sind diese beiden Projekte mit demselben Git-Repository verbunden?
Oleksandr
Ja, es ist das gleiche Repository, aber ich möchte meinen Zweig nicht auf den Server stellen
Nips
Warum verschmelzen Sie Ihren neuen Zweig nicht mit dem Master (oder einem anderen offiziellen Zweig)
Oleksandr,
1
Antworten auf diese Fragen sollen Ihnen helfen: stackoverflow.com/questions/7161860/… stackoverflow.com/questions/7175869/…
eckes

Antworten:

261

Ich nehme an, Sie möchten die Änderungen in einen Zweig übernehmen und diese Änderungen dann im anderen Zweig sichtbar machen. In Git sollten Sie keine Änderungen über HEAD haben, wenn Sie Zweige wechseln.

Sie schreiben nur die geänderten Dateien fest durch:

git commit [some files]

Oder wenn Sie sicher sind, dass Sie einen sauberen Staging-Bereich haben, können Sie

git add [some files]       # add [some files] to staging area
git add [some more files]  # add [some more files] to staging area
git commit                 # commit [some files] and [some more files]

Wenn Sie dieses Commit in beiden Zweigen verfügbar machen möchten, tun Sie dies

git stash                     # remove all changes from HEAD and save them somewhere else
git checkout <other-project>  # change branches
git cherry-pick <commit-id>   # pick a commit from ANY branch and apply it to the current
git checkout <first-project>  # change to the other branch
git stash pop                 # restore all changes again
Alex
quelle
22
Um buchstäblich nur diese Dateien festzuschreiben, selbst wenn andere Änderungen vorgenommen wurden, sollte das zweite Beispiel ( git commit [some files]das den --onlyWechsel impliziert ) verwendet werden. Das erste Beispiel ( git add [some files]gefolgt von git commit) übernimmt auch alle anderen Änderungen, die vorgenommen wurden.
Lexikos
4
Ich wäre hilfreich, um Beispiele für git commit [einige Dateien] bereitzustellen. Wie sollten Sie [einige Dateien], Komma, Leerzeichen ersetzen?
Claudiu Creanga
2
@claudiu Normalerweise ist Shell-Material durch Leerzeichen getrennt. Und wenn Sie tief genug tauchen, können Sie das in alles ändern
Alex
Wenn Sie einige Beispiele hinzufügen können, ist diese Antwort großartig.
Yamur
154

Rufen Sie eine Liste der Dateien ab, die Sie festschreiben möchten

$ git status

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

modified:   file1
modified:   file2
modified:   file3
modified:   file4

Fügen Sie die Dateien zum Staging hinzu

$ git add file1 file2

Überprüfen Sie, was Sie festlegen

$ git status

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   file1
    modified:   file2

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   file3
    modified:   file4

Übernehmen Sie die Dateien mit einer Festschreibungsnachricht

$ git commit -m "Fixed files 1 and 2"

Wenn Sie versehentlich die falschen Dateien festschreiben

$ git reset --soft HEAD~1

Wenn Sie die Dateien entfernen und neu beginnen möchten

$ git reset

Unstaged changes after reset:
M file1
M file2
M file3
M file4
Abram
quelle
92

Sie können einige aktualisierte Dateien wie folgt festschreiben:

git commit file1 file2 file5 -m "commit message"
Adriano Rivolli
quelle
30

Einiges davon scheint "unvollständig" zu sein

Gruppen von Menschen werden NICHT wissen, ob sie Anführungszeichen usw. verwenden sollten.

Fügen Sie 1 bestimmte Datei hinzu, die auch die Speicherortpfade anzeigt

git add JobManager/Controllers/APIs/ProfileApiController.cs

Festschreiben ( Denken Sie daran, Festschreiben ist nur lokal und wirkt sich nicht auf andere Systeme aus.)

git commit -m "your message"  

Zum Remote-Repo drücken

git push  (this is after the commit and this attempts to Merge INTO the remote location you have instructed it to merge into)

Andere Antworten zeigen den Vorrat usw., den Sie manchmal tun möchten

Tom Stickel
quelle
11

Wenn Sie bereits Dateien bereitgestellt haben, entfernen Sie sie einfach:

git reset HEAD [file-name-A.ext] [file-name-B.ext]

Fügen Sie sie dann Stück für Stück wieder hinzu.

Kaiser
quelle
11

Angenommen, Sie haben Änderungen an mehreren Dateien vorgenommen, z.

  • Datei1
  • Datei2
  • Datei3
  • Datei4
  • Datei5

Sie möchten jedoch nur Änderungen an Datei1 und Datei3 festschreiben.

Dafür gibt es zwei Möglichkeiten:

1.Stufen Sie nur diese beiden Dateien ein, indem Sie Folgendes verwenden:

git add file1 file2

dann begehen

git commit -m "your message"

dann drücken,

git push

2.Direktes Festschreiben

git commit file1 file3 -m "my message"

dann drücken,

git push

Eigentlich ist die erste Methode nützlich , wenn wir Dateien regelmäßig ändern und bereitstellen -> Große Projekte, im Allgemeinen Live-Projekte.
Wenn wir jedoch Dateien ändern und nicht bereitstellen, können wir direkt festschreiben -> kleine Projekte

KamalDeep
quelle
Wenn Sie den Dateinamen nicht wie in Ihrem zweiten Beispiel angegeben angeben, geht git davon aus, dass das Befehlsflag für diese Argumente lautet --only. Dann wäre es der gleiche Befehl wie git commit --only file1 --only file3 -m "my message"oder unter Verwendung einer Verknüpfung als git commit -o file1 -o file3 -m "my message"Referenz: git-scm.com/docs/git-commit
Benutzer
0

Dies ist ein einfacher Ansatz, wenn Sie nicht viele Codeänderungen haben:

1. git stash
2. git stash apply
3. remove the files/code you don't want to commit
4. commit the remaining files/code you do want

Wenn Sie den Code, den Sie entfernt haben (Bits, die Sie nicht festgeschrieben haben), in einem separaten Commit oder einem anderen Zweig haben möchten, tun Sie Folgendes, während Sie sich noch in diesem Zweig befinden:

5. git stash apply
6. git stash

Wenn Sie in Schritt 5 den Stash bereits angewendet und den in Schritt 4 gewünschten Code festgeschrieben haben, ist der Unterschied und der nicht verfolgte Code im neu angewendeten Stash nur der Code, den Sie in Schritt 3 entfernt haben, bevor Sie in Schritt 4 festgeschrieben haben.

Als solches ist Schritt 6 ein Vorrat des Codes, den Sie nicht festschreiben wollten, da Sie diese Änderungen wahrscheinlich nicht wirklich verlieren möchten, oder? Der neue Stash aus Schritt 6 kann nun für diesen oder einen anderen Zweig festgeschrieben werden, indem git stash auf den richtigen Zweig angewendet und festgeschrieben wird.

Dies setzt natürlich voraus, dass Sie die Schritte in einem Ablauf ausführen. Wenn Sie an einem anderen Punkt in diesen Schritten verstauen, müssen Sie die Versteckreferenz für jeden der oben genannten Schritte notieren (und nicht nur die grundlegende Verstecke und die neueste Verstecke anwenden).

James
quelle