git checkout -b foo
schaltet den foo
Zweig ein (auch wenn er nicht existiert, wird er erstellt), aber wenn der foo
Zweig bereits existiert, wird ein Fehler wie der folgende ausgegeben:
fatal: A branch named 'foo' already exists.
Was ist der Befehl, der die folgende Prüfung durchführt?
- Wenn der Zweig bereits vorhanden ist, schalten Sie ihn einfach ein (
git checkout foo
) - Wenn der Zweig nicht existiert, erstellen Sie ihn und schalten Sie ihn ein (
git checkout -b foo
)
git
Guru! :-) Akzeptieren in 4 Minuten.-B
wird zurückgesetzt den Zweig, siehe meine Antwort für eine (längere ...) Alternative.Einverstanden mit Schmied. Hatte das gleiche Problem und
-B
löst es nicht, weil zurückgesetzt. Seine Lösung funktioniert, aber meine Lösung sieht einfacher aus:Das ist für mich in Ordnung :)
BEARBEITEN
Ohne Fehlerausgabe iff foo existiert nicht
quelle
switch = "!f() { git checkout $1 2>/dev/null || git checkout -b $1; }; f"
Beachten Sie die ziemlich wichtige Tatsache , dass
-B
wird zurückgesetzt einen bestehenden Zweig , bevor sie auszuchecken, was ich nicht glaube , @Ionica nach seiner Frage möchte.Ich habe es sicherlich nicht getan, also ist der beste Einzeiler, den ich mir vorstellen kann, folgender:
git checkout $(git show-ref --verify --quiet refs/heads/<branch> || echo '-b') <branch>
Dies kann zu einem praktischen Alias wie folgt gemacht werden:
quelle
Der Befehl
checkout -b
erstellt einen neuen Zweig und checkt dann in diesen Zweig aus. Wenn also bereits ein Zweig vorhanden ist, kann er keinen neuen erstellen.Stattdessen müssen Sie Folgendes tun:
Der obige Befehl wird kontextsensitiv ausgeführt. Wenn es einen Zweig gibt, wechselt er, wenn nicht, erstellt er und checkt aus.
quelle
Nicht sehr verschieden von dem, was George Pavelka vorgeschlagen hat, aber anstatt sich auf den Status "git checkout" zu verlassen, prüft dies das Vorhandensein und entscheidet dann über den zu verwendenden Befehl
quelle