it-swarm.com.de

Übernehmen Sie alle nicht verfolgten Dateien und fügen Sie sie automatisch hinzu

Ich habe oft vergessen, dass ich einige neue Dateien habe und direkt tun,

git commit -a -m "My commit message"

Dadurch werden nur geänderte Dateien festgeschrieben, und ich muss die verbleibenden Dateien zu einem neuen Festschreiben hinzufügen. Dies bedeutet, dass es zwei separate Festschreibungen gibt, obwohl sie logischerweise Teil derselben Aufgabe sind.

Die einfachste Möglichkeit, nicht verfolgte Dateien über zwei aufeinanderfolgende Befehle in das Commit einzubeziehen:

git add -A
git commit -a -m "My commit message"

Ist es möglich, den gleichen Effekt wie oben in einem Befehl zu erzielen?

48
Louis Rhys

Erstellen Sie eine Datei in Ihrem Ausführungspfad mit dem Namen (keine Erweiterung): git-add-commit-untracked

Gib das ein:

#!/bin/bash
message=${0}
git add -A
git commit -am "$message"

Dann: git-add-commit-untracked "Commit message"

Sie können jedoch einen kürzeren Namen für die Datei verwenden. Ich habe es zur Veranschaulichung lange stehen lassen.

16
d_ethier

Sie können einen Alias ​​definieren, um alle vor dem Festschreiben hinzuzufügen. Fügen Sie einfach diese Zeilen in Ihre ~/.gitconfig-Datei ein:

[alias]
        ca = !sh -c 'git add -A && git commit -m \"$1\"' -

Dann benutze deinen Alias ​​wie folgt:

$ git ca 'Your commit message'
12
kowak

Hier sind einige Optionen:

  • Verwenden Sie git commit --amend, Damit Sie nach dem Hinzufügen der nicht verfolgten Dateien nur ein Commit erhalten (nicht jedoch, wenn Sie das vorherige Commit bereits durchgeführt haben).
  • Benutze git commit --interactive;
  • Erstellen Sie einen Alias ​​oder ein Skript, das automatisch neue Dateien hinzufügt (Beispiele in anderen Antworten). Hier sind zwei Aliase, die ich für genau diesen Zweck verwende:

    [alias]
        untracked = ls-files --other --exclude-standard
        add-untracked = !git add $(git untracked)
    
  • Drücken Sie Ihre beiden Commits mit git rebase -i, git reset <commit prior to first commit> Und git commit Oder git merge --squash Auf einen anderen Zweig.

Sie können jedoch nicht überschreiben einen eingebauten Befehl wie commit mit einem Alias, so dass Sie immer noch daran denken müssen, die gewünschten Dateien vor dem Festschreiben zum Index hinzuzufügen.

Leider können Sie auch keine Pfade zusammen mit git commit -a Angeben. Ich habe gerade git commit -a $(git untracked) ausprobiert und es hat mir fatal: Paths with -a does not make sense. Gesagt. Um Ihre grundlegende Frage zu beantworten, denke ich, dass ein Git-Skript der einzige nicht interaktive Weg wäre.

8
Richard

Es ist nicht möglich, die Standardschnittstelle git zu verwenden. git unterstützt jedoch Aliase .

Mit einem Alias ​​können Sie einen anderen git-Befehl aufrufen oder sogar beliebige Shell-Skripte ausführen. Erstellen Sie ein Skript mit den beiden Befehlen und geben Sie einen Alias ​​an.

Siehe das Wiki für weitere Informationen zu Aliasen und diese Frage für dieses spezielle Szenario.

Bearbeiten: Beachten Sie, dass dies keine so gute Idee ist. Es besteht die Möglichkeit, dass Sie versehentlich unnötige Dateien hinzufügen oder einen unbrauchbaren Alias ​​aufgrund von nicht versionierten Dateien im Baum haben.

0
slezica

Ja, ich hatte in der Vergangenheit das gleiche Problem wie Sie. Ich habe es vorgezogen, den Befehl git zu verwenden, aber ich hatte große Probleme, weil der Guard in Rails viele Dateien ohne Vorwarnung geändert hat :)

Also, wenn ich neuen Code festschreibe, versuche ich, die Benutzeroberfläche zu verwenden, um dies zu tun (Git GUI) und denke daran, verwende niemals git commit -a, Weil du nicht sicher bist, welche Dateien geändert wurden! Nachdem Sie den neuen Code wiederhergestellt haben, rufen Sie den Git-Baum mit gitk auf, damit Sie die zuletzt festgelegte Verpflichtung, die Committer, die Commit-Dateien usw. kennen.

0
duykhoa