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.
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"
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
@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"
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