Wechseln Sie die Filialnamen in git

103

Es kann mehrere Möglichkeiten geben, diese Frage zu stellen. Hier ist eine Beschreibung des Problems. Ich arbeitete am Master und engagierte einige Sachen und entschied dann, dass ich diese Arbeit auf Eis legen wollte. Ich habe ein paar Commits gesichert und mich dann verzweigt, bevor ich mit meiner Mistarbeit angefangen habe. Praktisch funktioniert das gut, ich habe gerade einen anderen Zweig als meinen Hauptentwicklungszweig. Ich frage mich, wie ich die Dinge ändern könnte, damit ich wieder am Master arbeite, aber es gibt keine Junk-Arbeit und die Arbeit befindet sich in einem anderen Zweig.

Einige Möglichkeiten, wie dies gefragt / gelöst werden könnte: Wie benenne ich meinen Hauptzweig in etwas anderes um und benenne dann etwas anderes in Master um? Wie kann ich den Master sichern und dann bewirken, dass sich alle Commits, die ich in der Vergangenheit gesichert habe, in einem anderen Zweig befinden?

Danke für all die (schnellen) Antworten! Sie sind alle gut.

Daniel Benamy
quelle

Antworten:

144

Zusätzlich zu den anderen Kommentaren kann der Schalter -m (move) zu git-branch hilfreich sein. Sie können Ihren alten Master in etwas anderes umbenennen und dann Ihren neuen Zweig in Master umbenennen:

git branch -m master crap_work
git branch -m previous_master master
Greg Hewgill
quelle
Abhängig von Ihrem Workflow möchten Sie möglicherweise auch Zweigverweise in .git / config ändern. Ich habe [branch "crap_work"]zum Lesen gewechselt , [branch "master"]damit der Master immer noch synchronisiert wird origin/master. Natürlich war der Zustand der beiden Repos so, dass dies immer noch Sinn machte.
Gleichnamiger
3
Dadurch werden Zweige im Remote-Repo nicht umbenannt, sondern nur im lokalen Repo.
Smohadjer
1
@smohadjer Um die Fernbedienungen umzubenennen, würden Sie tun git push -uf origin masterund git push -u origin crap_work.
Zyy
31

Ich denke, Sie sollten eine andere Entwicklungsstrategie in Betracht ziehen, um solche Probleme zu vermeiden. Eine, die für mich am besten zu funktionieren scheint, ist, niemals direkt in meinem Master-Zweig zu entwickeln. Unabhängig von den Änderungen, die ich vornehme, erstelle ich immer einen neuen Zweig für neuen Code:

git checkout -b topic / topic_name master

Von dort aus kann ich die Änderungen an öffentlichen Repositories veröffentlichen:

git push pu topic / topic_name

oder füge es irgendwann einfach wieder in meinen Hauptzweig ein:

Git Checkout Master && Git Merge Topic / Topic_Name

Wenn Sie wirklich zu einem älteren Zeitpunkt zurückkehren und diesen als Ihren Master festlegen müssen, können Sie den aktuellen Zweig in etwas anderes umbenennen und dann eine ältere Version als Ihren Master auschecken:

 Git Branch -m Master Junk
 git co-b master old_sha1_value
Brian Riehman
quelle
Das ist eine gute Politik. Und wenn ich daran denke, habe ich gesehen, dass das woanders praktiziert wird. Vielen Dank.
Rimian
14

Beginnen Sie mit master, erstellen Sie einen Zweig mit dem Namen in-progressund setzen Sie ihn masterauf ein früheres Commit zurück.

$ git branch in-progress
$ git reset --hard HEAD^
Ted Percival
quelle
1
Ich sehe keinen Grund dafür, dass dies abgelehnt wurde. Ich habe es ein paar Mal selbst gemacht, bevor ich etwas über Zweig -m gelernt habe und festgestellt habe, dass der Meister nicht unveränderlich als ständiger Name eines Zweigs gebunden ist.
Skiphoppy
7

Das ist relativ einfach:

git checkout -b fake_master master # fake_master now points to the same commit as master
git branch -D master               # get rid of incorrect master
git checkout -b master real_master # master now points to your actual master
git checkout master                # optional -- switch on to your master branch
olliej
quelle
1
Ja, der letzte ist völlig optional - git checkout -berstellt einen Zweig und macht ihn aktiv.
Inkarnation
0

Dies setzt Ihren Master in einem Schritt auf einen beliebigen Punkt:

git checkout -B master new_point
Penghe Geng
quelle