Wie kann ich alle Dateien, einschließlich neu hinzugefügter Dateien, mit einem einzigen Befehl bereitstellen und festschreiben?


425

Wie kann ich alle Dateien, einschließlich neu hinzugefügter Dateien, mit einem einzigen Befehl bereitstellen und festschreiben?


3
Das Frustrierende ist, dass dies früher möglich war und die Standardsyntax zum Festschreiben und Hinzufügen neuer Dateien war: git commit -a Aber natürlich hat sich die git-Syntax geändert. Es verwirrte vorhandene Benutzer (und brach ihre Skripte), beseitigte nützliche Funktionen und ersetzte ein unnötiges Flag.
Fidschiaaron

1
Es gibt ein Duplikat davon bei git add -A, git commit in einem Befehl? . Die dort akzeptierte Antwort ähnelt der hier akzeptierten Antwort, schlägt jedoch vor, einen Git-Alias ​​zu erstellen, um die Eingabe zu verkürzen (und zeigt, wie dies zu tun ist).
Mark Amery

Antworten:


567

Tut

git add -A && git commit -m "Your Message"

als "Einzelbefehl" zählen?

Bearbeiten Sie basierend auf der Antwort von @ thefinnomenon unten :

Um es als zu haben git alias, verwenden Sie:

git config --global alias.coa '!git add -A && git commit -m'

und schreiben Sie alle Dateien, einschließlich neuer Dateien, mit einer Nachricht fest mit:

git coa "A bunch of horrible changes"

Erklärung (aus der git addDokumentation ):

-A, --all, --no-ignore-remove

Aktualisieren Sie den Index nicht nur dort, wo der Arbeitsbaum eine übereinstimmende Datei aufweist, sondern auch dort, wo der Index bereits einen Eintrag enthält. Dadurch werden Indexeinträge hinzugefügt, geändert und entfernt, um sie an den Arbeitsbaum anzupassen.

Wenn <pathspec>bei Verwendung der Option -A kein angegeben wird, werden alle Dateien im gesamten Arbeitsbaum aktualisiert (alte Versionen von Git beschränken die Aktualisierung auf das aktuelle Verzeichnis und seine Unterverzeichnisse).


3
Was ist mit der Commit-Nachricht?
Narendra Jaggi

11
@ NarendraJaggi git add -A && git commit -m "Ihre Nachricht"
Dr.jacky

1
man könnte das in seine eigene .sh- oder .bat-Datei einfügen und es einfach als einen Befehl verwenden. Die Nachricht könnte param1
BlueWizard

Außerdem können Sie Verknüpfungen für grundlegende Git-Befehle in Ihrem .bashrc hinzufügen: alias gpl = 'git pull' alias gps = 'git push' alias gc = 'git commit' alias gs = 'git status' alias gd = 'git diff' alias ga = 'git add' alias gck = 'git checkout' alias gb = 'git branch' alias gl = 'git log' alias lcp = 'git format-patch -1 HEAD' alias resetToMaster = 'git reset --hard origin / master '
ni3

3
In Powershell ersetzen Sie "&&" durch ";" um beide Befehle wie git add -A ; git commit -m "Your Message"
Rafael Miceli

415

Dieser Befehl fügt alle geänderten Dateien hinzu und schreibt sie fest, jedoch keine neu erstellten Dateien .

git commit -am  "<commit message>"

Vom Menschen git-commit:

   -a, --all
       Tell the command to automatically stage files that have been modified
       and deleted, but new files you have not told Git about are not
       affected.

100
Dies beantwortet die Frage nicht wirklich, sondern schließt speziell (in Fettdruck nicht weniger) einen der Schlüsselteile der gesuchten Lösung aus.
Arunas

6
Fügt keine nicht verfolgten Dateien hinzu oder schreibt sie fest.
15.

3
Aber es deckt die typischste Situation ab, wenn Sie nach "git add -A" festschreiben und feststellen, dass Sie vergessen haben, etwas Kleines im Code zu ändern. Ich hasse es, dieselbe Commit-Nachricht mehrmals von Grund auf neu zu schreiben
KorbenDallas

aber der Thread-Starter sagt ALLE DATEIEN, also denke ich, dass dieser nicht zählt
Frederick G. Sandalo

Außerdem können Sie Verknüpfungen für grundlegende Git-Befehle in Ihrem .bashrc hinzufügen: alias gpl = 'git pull' alias gps = 'git push' alias gc = 'git commit' alias gs = 'git status' alias gd = 'git diff' alias ga = 'git add' alias gck = 'git checkout' alias gb = 'git branch' alias gl = 'git log' alias lcp = 'git format-patch -1 HEAD' alias resetToMaster = 'git reset --hard origin / master '
ni3

26

Ich benutze diese Funktion:

gcaa() { git add --all && git commit -m "$*" }

In meiner zsh-Konfigurationsdatei kann ich also einfach Folgendes tun:

> gcaa This is the commit message

Automatisches Bereitstellen und Festschreiben aller Dateien.


1
für Bash-likefunction gcaa() { git add --all && git commit -m "$*" && git push }
Damilola

1
@Damilola - was meinst du mit Bash-like ? Die Syntax in der Antwort funktioniert auch in Bash
Eliran Malka

das ist schön, ich habe vorher einen alias wie verwendet, gaa && gc -m "my commit"aber das ist so viel schöner ... <eilt davon, um bashrc zu ändern ..>
andy mccullough


24

Ich bin mir nicht sicher, warum diese Antworten alle um das herum tanzen, was ich für die richtige Lösung halte, aber für das, was es hier wert ist, verwende ich Folgendes:

Erstellen Sie einen Alias:

git config --global alias.coa '!git add -A && git commit -m'

Alle Dateien hinzufügen und mit Nachricht festschreiben:

git coa "A bunch of horrible changes"

HINWEIS: coasteht für Commit All und kann durch alles ersetzt werden, was Ihr Herz begehrt


1
Keine andere Antwort als diese vereinfacht erfolgreich das Festschreiben aller Nachrichten.
Seph Reed

2
Das ist super, habe nach dem git aliasWeg gesucht , der Rest ist langweilig.
Qortex

9

Das Festschreiben in git kann je nach Situation ein mehrstufiger Prozess oder ein Schritt sein.

  1. In dieser Situation haben Sie mehrere Dateien aktualisiert und möchten Folgendes festschreiben:

    Sie müssen alle geänderten Dateien hinzufügen, bevor Sie etwas festschreiben.

    git add -A
    

    oder

    git add --all
    
  2. Danach können Sie alle hinzugefügten Dateien festschreiben

    git commit
    

    Dazu müssen Sie die Nachricht für dieses Commit hinzufügen.


6

Wenn Sie nur eine "schnelle und schmutzige" Methode zum Speichern von Änderungen im aktuellen Zweig wünschen, können Sie den folgenden Alias ​​verwenden:

git config --global alias.temp '!git add -A && git commit -m "Temp"'  

Nachdem Sie diesen Befehl ausgeführt haben, können Sie einfach eingeben git temp, damit git alle Ihre Änderungen automatisch als Commit mit dem Namen "Temp" in den aktuellen Zweig festschreibt. Anschließend können Sie git reset HEAD~die Änderungen später "aufheben", damit Sie weiter daran arbeiten können, oder git commit --amenddem Festschreiben weitere Änderungen hinzufügen und / oder ihm einen richtigen Namen geben.


4

Ich habe in meiner Konfiguration zwei Aliase:

alias.foo=commit -a -m 'none'
alias.coa=commit -a -m

Wenn ich zu faul bin, begebe ich einfach alle Änderungen mit

git foo

und nur um ein schnelles Commit zu machen

git coa "my changes are..."

coa steht für "alles begehen"


9
Ich würde es hassen, mit einem Repository zu arbeiten, das mit Commit-Nachrichten gefüllt ist, in denen "none" steht, und ich würde auch PRs auf dieser Basis ablehnen. Leider können Sie nur lernen, wie wichtig gute Commit-Nachrichten sind, wenn Sie zurückkehren müssen, um etwas zu prüfen, das vor langer Zeit geschrieben wurde ("Diese Zeile verursacht einen Fehler ... warum wurde sie überhaupt hinzugefügt und wird irgendetwas tun) Pause, wenn ich es ändere / entferne? ").
Gregmac

1
Commits mit "none" sollen niemals lange bleiben. Normalerweise starte ich meinen eigenen Feature-Zweig, mache Micro-Commits und zerquetsche sie vor einer Zusammenführung zu etwas Vernünftigerem. Offensichtlich brauchen Leute, die Commits für jede modifizierte Funktion ausführen und sich nicht um ein vollständiges Git-Protokoll kümmern, dies nicht.
SystematicFrank

1
Ich verwende zu diesem Zweck 'wip' (kurz für "work in progress") anstelle von 'none' und übertrage solche Commits nur an meine privaten Filialen.
Sergej Koščejev

Es ist immer noch nicht hilfreich, da diese "Wip" - oder "None" -Commits es schließlich in einen Zweig schaffen, den andere Leute sehen, und das Nachrichtenprotokoll verschmutzen. Wenn Sie alle Ihre Commits unterdrücken, bevor Sie pushen, wäre das akzeptabel, aber ansonsten ist es für das Team immer noch ärgerlich.
Jordanien

Dies ist eine gute Idee, und wenn Sie sie mit der nächsten Antwort kombinieren, erhalten Sie tatsächlich die 100% genaue Antwort für das OP. In meiner Antwort habe ich die notwendigen Schritte (mit git-bash) beschrieben. ( stackoverflow.com/a/43442269/869239 )
VeRo

3

Führen Sie den angegebenen Befehl aus

git add . && git commit -m "Changes Committed"

Selbst wenn es sich um einen einzelnen Befehl handelt, werden zwei separate Befehle nacheinander ausgeführt. Hier haben wir sie nur &&kombiniert. Es ist nicht viel anders als laufen git add .und git commit -m "Changes Committed"separat. Sie können mehrere Befehle gleichzeitig ausführen, aber die Reihenfolge spielt hier eine Rolle. Wenn Sie die Änderungen zusammen mit Staging und Commit auf den Remote-Server übertragen möchten, können Sie dies wie angegeben tun.

git add . && git commit -m "Changes Committed" && git push origin master

Wenn Sie stattdessen die Reihenfolge ändern und die pusherste setzen, wird sie zuerst ausgeführt und gibt nach dem Staging und Commit nicht den gewünschten Push aus, nur weil sie bereits zuerst ausgeführt wurde.

&&führt den zweiten Befehl in der Zeile aus, wenn der erste Befehl erfolgreich zurückkommt, oder mit einer Fehlerstufe von 0. Das Gegenteil von &&ist ||, das den zweiten Befehl ausführt, wenn der erste Befehl nicht erfolgreich ist, oder mit einer Fehlerstufe von 1.

Alternativ können Sie alise as erstellen git config --global alias.addcommit '!git add -a && git commit -m'und als verwendengit addcommit -m "Added and commited new files"


2

Tolle Antworten, aber wenn Sie nach einer einzigen Zeile suchen, können Sie alles verketten, aliasisieren und die Bequemlichkeit genießen:

git add * && git commit -am "<commit message>"

Es ist eine einzelne Zeile, aber zwei Befehle, und wie bereits erwähnt, können Sie diese Befehle als Alias ​​verwenden:

alias git-aac="git add * && git commit -am " (Das Leerzeichen am Ende ist wichtig), da Sie den neuen Kurzhandbefehl parametrieren werden.

Von diesem Moment an verwenden Sie diesen Alias:

git-acc "<commit message>"

Sie sagen im Grunde:

git, füge für mich alle nicht verfolgten Dateien hinzu und schreibe sie mit dieser gegebenen Festschreibungsnachricht fest.

Hoffe du benutzt Linux, hoffe das hilft.


0

Sie können ein kleines Skript schreiben (siehe Ian Clellands Antwort), git-commitalldas mehrere Git-Befehle verwendet, um das auszuführen, was Sie tun möchten.
Platzieren Sie dieses Skript an einer beliebigen Stelle in Ihrem $PATH. Sie können es so nennen git commitall... sehr praktisch!

Gefunden hier (Frage und alle Antworten leider gelöscht, nur mit hohem Ansehen sichtbar)


Der ganze Thread ist eine gute Lektüre ... deshalb habe ich ihn verlinkt ^^
tanascius

@ Dimitri - leider haben einige Studid-Leute beschlossen, diesen nützlichen Thread zu löschen. Es ist immer noch mit hohem Ansehen sichtbar, daher behalte ich den Link hier.
Tanascius

0

versuchen Sie es mit:

git add . && git commit -m "your message here"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.