2008-08-22 11 views
98

Es kann mehr als eine Möglichkeit geben, diese Frage zu stellen, daher folgt hier eine Beschreibung des Problems. Ich arbeitete an Meister und verübte einige Sachen und entschied dann, dass ich diese Arbeit auf Eis legen wollte. Ich habe ein paar Commits gemacht und bin dann abgegangen, bevor ich mit meiner Mistarbeit begonnen habe. Praktisch funktioniert das gut, ich habe gerade einen anderen Zweig als Hauptentwicklungszweig. Ich frage mich, wie ich die Dinge ändern könnte, also arbeite ich wieder an Meister, aber es hat nicht meine Schrottarbeit und sagte, Arbeit ist in einem anderen Zweig.Wechseln Sie die Zweignamen in git

Einige Möglichkeiten, wie dies gefragt/gelöst werden könnte: Wie benenne ich meinen Master-Zweig zu etwas anderem und benennen Sie dann etwas anderes zu Master? Wie kann ich den Master sichern und dann veranlassen, dass alle Commits, die ich gesichert habe, in einem anderen Zweig liegen?

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

Antwort

140

Zusätzlich zu den anderen Kommentaren finden Sie möglicherweise die Option -m (Verschieben) auf Git-Zweig hilfreich. Sie können Ihre alten Meister auf etwas anderes, dann benennen Sie die neue Filiale zu Master umbenennen:

git branch -m master crap_work 
git branch -m previous_master master 
+1

Dies funktioniert auch, wenn Sie Ihre aktuelle Filiale umbenennen! :) – Tarrasch

+0

Abhängig von Ihrem Workflow möchten Sie möglicherweise auch alle Zweigverweise in .git/config ändern. Ich habe '[branch" crap_work "]' geändert, um '[branch" master "]' zu lesen, so dass der master immer noch mit 'origin/master' synchronisieren würde. Natürlich war der Zustand der beiden Repos so, dass dies immer noch Sinn ergab. – Eponymous

+1

Dies bedeutet keine Umbenennung von Zweigen im Remote-Repo, nur beim lokalen Repo. – smohadjer

8

Dies 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 
+1

Yeap, die letzte ist komplett optional - 'git checkout -b' a erstellt Zweig ** und ** macht es aktiv. – incarnate

15

Start am master, einen Zweig erstellen in-progress genannt, dann master zurückgesetzt auf einen früheren begehen.

+1

Ich sehe keinen Grund dafür, dass dies abgelehnt wurde. Ich habe es ein paar Mal selbst gemacht, bevor ich von der Zweigstelle -m erfuhr und erkannte, dass der Meister nicht unveränderlich als der permanente Name einer Zweigniederlassung gebunden war. – skiphoppy

32

Ich denke, sollten Sie eine andere Entwicklungsstrategie betrachten Fragen wie diese zu verhindern. Eine, die am besten für mich funktioniert, ist, niemals direkt in meinem Master-Zweig zu arbeiten. Unabhängig von den Veränderungen, die ich mache, schaffe ich immer einen neuen Zweig für neuen Code:

 
git checkout -b topic/topic_name master 

Von dort habe ich die Änderungen an öffentlichen Repositories verdrängen können:

 
git push pu topic/topic_name 

oder schließlich nur fusionieren es zurück in meinem Herrn Zweig:

 
git checkout master && git merge topic/topic_name 

Wenn Sie wirklich zurück zu einer älteren Zeitpunkt und stellen Sie gehen müssen, dass als Master, können Sie den aktuellen Zweig auf etwas anderes umbenennen und dann check out eine ältere Version Ihr Meister zu sein:

 
git branch -m master junk 
git co -b master old_sha1_value 
+0

Das ist eine gute Politik. Und wenn ich darüber nachdenke, habe ich das anderswo praktiziert gesehen. Vielen Dank. – Rimian

0

Dieser Ihren Master zu einem beliebigen Punkt in einem Schritt gesetzt wird:

git checkout -B master new_point