861 Stimmen

Zusammenführen, Aktualisieren und Ziehen von Git-Zweigen ohne Verwendung von Checkouts

Ich arbeite an einem Projekt, das 2 Zweige hat, A und B. Ich arbeite normalerweise an Zweig A und führe Sachen aus Zweig B zusammen:

git merge origin/branchB

Ich möchte jedoch auch eine lokale Kopie von Zweig B behalten, da ich den Zweig gelegentlich auschecken kann, ohne ihn zuerst mit meinem Zweig A zusammenzuführen:

git checkout branchB
git pull
git checkout branchA

Gibt es eine Möglichkeit, die oben genannten Schritte mit einem einzigen Befehl auszuführen, ohne zwischen den Verzweigungen hin und her wechseln zu müssen? Sollte ich Folgendes verwenden git update-ref dafür? Wie?

1 Stimmen

4voto

Casebash Punkte 106938

In vielen Fällen (z. B. beim Zusammenführen) können Sie einfach den entfernten Zweig verwenden, ohne den lokalen Tracking-Zweig aktualisieren zu müssen. Das Hinzufügen einer Nachricht im Reflog klingt nach Overkill und verhindert, dass es schneller geht. Um die Wiederherstellung zu erleichtern, fügen Sie Folgendes in Ihre Git-Konfiguration ein

[core]
    logallrefupdates=true

Dann tippen Sie

git reflog show mybranch

um den aktuellen Verlauf für Ihre Zweigstelle zu sehen

0 Stimmen

Ich denke, der Abschnitt muss lauten [core] pas [user] ? (und es ist standardmäßig eingeschaltet, für Repos mit einem Arbeitsbereich (d.h. nicht nackt).

2voto

grego Punkte 420
git worktree add [-f] [--detach] [--checkout] [--lock] [-b <new-branch>] <path> [<commit-ish>]

Sie können versuchen git worktree Das klingt so, als ob es das wäre, was Sie wollen, aber ganz anders als einige der anderen Antworten, die ich hier gesehen habe.

Auf diese Weise können Sie zwei getrennte Zweige im selben Git-Repository verfolgen, so dass Sie nur einmal fetch, um Aktualisierungen in beiden Arbeitsbäumen zu erhalten (anstatt zweimal git clone und git pull auf jedem)

Worktree erstellt ein neues Arbeitsverzeichnis für Ihren Code, in dem Sie einen anderen Zweig gleichzeitig auschecken lassen können, anstatt die Zweige an Ort und Stelle zu wechseln.

Wenn Sie sie entfernen möchten, können Sie sie mit

git worktree remove [-f] <worktree>

2voto

Sodhi saab Punkte 2499

Um den Master zu ziehen, ohne den Master zu überprüfen, verwende ich

git fetch origin master:master

1voto

phkb Punkte 113

Wenn Sie denselben Baum wie einen der Zweige, die Sie zusammenführen wollen, beibehalten wollen (d.h. keine echte "Zusammenführung"), können Sie wie folgt vorgehen.

# Check if you can fast-forward
if git merge-base --is-ancestor a b; then
    git update-ref refs/heads/a refs/heads/b
    exit
fi

# Else, create a "merge" commit
commit="$(git commit-tree -p a -p b -m "merge b into a" "$(git show -s --pretty=format:%T b)")"
# And update the branch to point to that commit
git update-ref refs/heads/a "$commit"

-3voto

paulomc Punkte 1

Sie können einfach git pull origin branchB in Ihr branchA und git erledigt den Rest für Sie.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X