it-swarm.com.de

Übergeben Sie ein Argument an einen Git-Alias-Befehl

Kann ich Argumente an den Alias ​​eines Git-Befehls übergeben?

Ich habe einen Alias ​​in Git config, so:

rb1 = rebase -i HEAD~1
rb2 = rebase -i HEAD~2
rb3 = rebase -i HEAD~3
rb4 = rebase -i HEAD~4
....

Ist es möglich, einen rb-Alias ​​zu erstellen, damit git rb <x> für jeden <x> funktioniert?

Ich habe dieses Alias ​​versucht:

rb = rebase -i HEAD~

aber dann funktioniert git rb 8 nicht.

64
HaveF

Wenn Sie den Git Faq-Abschnitt "Git-Aliase mit Argument" betrachten, können Sie dies tun, indem Sie git über eine Shell aufrufen:

[alias]
        rb = "!sh -c \"git rebase -i HEAD~$1\" -"

Ich habe es noch nicht getestet, aber wenn Sie ein Argument weitergeben können, wäre dies der Weg. 

Eine ähnliche Lösung wäre die Verwendung einer Shell-Funktion :

[alias]
        rb = "!f() { git rebase -i HEAD~$1; }; f"
89
VonC

Zurücksetzen aller Commits seit dem Verzweigen

Wenn Sie nur alle neuen Commits in Ihrer Verzweigung rebasieren möchten, da Sie von der übergeordneten Verzweigung aus verzweigt wurden, ist es einfacher, den folgenden Alias ​​in Ihrer Konfiguration zu haben:

rbi = !sh -c \"git rebase -i `git merge-base $1 HEAD`\" -

Wenn Sie dann alle Commits, die Sie zu Ihrem aktuellen Zweig hinzugefügt haben, neu stützen möchten, können Sie einfach Folgendes ausführen:

git rbi parentBranch

Dieser Ansatz verwendet ein Argument. Anstatt jedoch wissen zu müssen, wie viele Commits zurückgehen sollen, geben Sie einfach den Namen des Zweigs an, und er ermittelt das letzte Commit, das der aktuelle Zweig und der übergeordnete Zweig über git merge-base geteilt haben.

Warum das, anstatt git rebase -i parentBranch

Der Grund dafür, dass Sie dies anstelle eines reinen git rebase -i parentBranch tun würden, besteht darin, dass Sie die Merge-Konflikte möglicherweise erst zu einem späteren Zeitpunkt oder gar einen Merge-Konflikt in einem Commit und dann denselben Konflikt in derselben Zeile behandeln möchten in einem anderen Commit. Siehe https://stackoverflow.com/a/31036645/444610

4
seth flowers

@Droogans wies in einem Kommentar auf die akzeptierte Antwort hin, dass man zumindest unter macOS (ich würde mir vorstellen, dass das gleiche für jedes Unix-ähnliche Betriebssystem und vielleicht sogar für Windows gilt) nur verwenden kann $1 als Platzhalterwert für das Argument im Alias. So richten Sie einen Alias ​​ein, sodass git rb 8 zu git rebase -i HEAD~8 wird:

    rb = "!git rebase -i HEAD~$1"

Sie können es auch mehrmals in einem Alias ​​verwenden. Wenn Sie beispielsweise einen Alias ​​benötigen, der git f my-branch in git fetch Origin my-branch:my-branch übersetzt, können Sie Folgendes tun:

    f = "!git fetch Origin $1:$1"
1
Andrew Patton

Ich habe diese Funktion "grb" geschrieben, um Git Interactive Rebase auf einem Mac auszuführen. Ich kann also grb 5 sagen, um meine letzten 5 Commits anzuzeigen:

function grb {
  git rebase -i HEAD\~$1
}

Die oberste Antwort auf dieser Seite funktioniert nicht für mich. Um meinen .bash_profile und alle anderen Git-Aliase anzuzeigen, die ich auf meinem Mac verwende:

https://github.com/rayning0/bash_profile/blob/master/.bash_profile#L149

0
Raymond Gan