2016-08-01 4 views
0

Ich bin ein paar Mal in diese Situation geraten und bin gespannt wie andere damit umgehen.Git Rebasing Konflikte mit sauberen Zweig und wie man damit umgehen?

Lassen Sie uns sagen, ich habe zwei Zweige auf dem Remote-Server, der wie folgt aussehen:

branchA: a123-->b123-->c123-->e123-->f123 

branchB: a123-->d123-->b123-->c123 

Lasst uns annehmen, dass d123 vor b123 und c123 auf branchB begangen wurde. Irgendwann müssen wir branchA auf branchB rebasieren, weil es Arbeit hat, die branchB benötigt. Ein Kollege macht das, räumt die Konflikte auf, alles ist gut und branchB wird zurück auf den Remote-Server geschoben. Meine lokale Niederlassung ist jetzt sauber und sieht etwas wie branchB verwendet aussehen:

local branchB: a123-->d123-->b123-->c123 

Natürlich muss ich rebase was von branchB in dem Remote-Server ist auf meinem lokalen branchB so habe ich die Arbeit. Manchmal stoße ich jedoch in eine Situation, in der ich Konflikte in meiner lokalen Filiale habe und Git bittet mich, durch jeden von ihnen zu gehen, da Rebasing normalerweise funktioniert. Das ist, weil ich nicht wirklich die Geschichte von branchA habe, die von einem Kollegen in branchB rebased wurde.

Das Problem ist, dass ich weiß, dass die ganze Arbeit, die ich bis zu diesem Punkt gemacht habe, in der entfernten branchB ist und es keine Konflikte gibt, die tatsächlich behoben werden können. Durch jede von ihnen zu gehen wäre Zeitverschwendung. Ich möchte nur die Geschichte, die auf der Fernbedienung branchB ist, um meine lokale Geschichte zu ersetzen.

Bei der Suche nach dem Internet scheint es ein paar verschiedene Lösungen für das Problem zu geben, aber ich bin mir nicht ganz sicher, welches ist das beste oder Linus genehmigt, wenn Sie so wollen. Ich bin mir eigentlich nicht sicher, ob ich überhaupt die Antwort gefunden habe, nach der ich suche.

Einige Antworten sagen, dass ich eine Rebase verwenden und die theirs Option verwenden oder eine andere Strategie auswählen sollte. Ich glaube, einige Antworten sagen, dass die --skip ist hier angebracht ... Wie auch immer es aussieht git --skipbuchstäblich Skips in einigen Fällen commits. Es sieht auch so aus, als ob die theirs Option wie git rebase -X theirs tatsächlich die SHAs für mich in einigen Fällen neu schreibt, was die Geschichte aus dem Gleichgewicht bringt, was ich nicht will.

Also, meine Frage ist, wie würde ich die Geschichte auf meinem lokalen Zweig mit der Geschichte auf dem Remote-Zweig vereinbaren, wenn:

  • Alles in meiner lokalen Niederlassung bereits im Remote-Zweig ist?
  • Mein Zweig ist sauber, hat keine ausstehenden Änderungen und es gibt wirklich keine Konflikte zu beheben?
  • Wirklich alles, was ich will, ist zu ersetzen, was in meinem lokalen Zweig Geschichte mit, was in der Remote-Zweig Geschichte ist?

Antwort

1

wirklich alles, was ich will, ist zu ersetzen, was in meinem lokalen Niederlassung Geschichte ist mit dem, was in der Remote-Zweig Geschichte

einfach einen Hard Reset durchführen:

git checkout branchB 
git fetch 
git reset --hard origin/branchB 
+0

Dies ist eine interessante Ansatz. Irgendwelche Ratschläge, wie man das sonst macht? – Sethen

Verwandte Themen