Wie Sie verhindern, dass viel von git Konflikte, wenn git Rebase Menge von commits?
Geschichte: in der Mitte von einem Projekt, das mein Kollege erstellt einen neuen Zweig von master und fing an, Ihre schweren re-factoring arbeiten. Ich habe mein Zweig von master und angefangen, neue Sachen auf die Seite. Wir Begehen regelmäßig, aber nur ich kann rebase-code master (weil die Kollegen änderungen sind zu schwer und können nicht bereitgestellt werden vom master noch nicht). Leider sind einige unserer arbeiten verlassen sich auf die gleichen Dateien. So nach einigen Tagen der Arbeit, wenn Sie endlich einen rebase Ihre änderungen master, Sie hatte eine Menge von git Konflikte.
my_branch #---#----#-#-------#----#--#-----#---#----#----#
/ \ \ \ \ \ \
master *-------*--------------*---*---*--------------*----*----*
\ /
her branch #------#-------#-----------#-----------#------------#
Frage 1 ist: wie Sie verhindern, dass viel von git Konflikte, wenn wir arbeiten an gleichen Dateien? (oder was ist die beste Vorgehensweise in dieser situation?)
aber das ist nicht das Ende unserer Frage, ...absolut richtig, Sie versucht zu tun, rebase von master Ihr branch (haben änderungen, die ich begangen), so ist die commit-Karte sollte in etwa so Aussehen
my_branch #---#----#-#-------#----#--#-----#---#----#----#
/ \ \ \ \ \ \
master *-------*--------------*---*---*--------------*----*----*
\ \ \ /
her branch #------#-------#----*------#-----*-----#------------#
Und das ist, was stört uns. Während dieser rebases Sie war die Festsetzung dieser Konflikte. Aber git nicht erinnern, Ihre Entscheidung über den Konflikt zu beheben, so dass, wenn Sie Tat ein weiteres git rebase von master zu Ihr-Zweig Sie musste Update das gleiche git Konflikte wieder, dass Sie die Befestigung in früheren rebases.
Frage 2 ist: wie sagen Sie git zu erinnern, git Konflikt Update nach git rebase von master Zweig, so dass nach dem nächsten Stellungswechsel, die wir nicht lösen können, die gleichen Konflikte immer wieder?
- oh, ich habe vergessen, meine git-version: 1.7.4.1 , Sie sollten gleich sein
- Genaue Frage, die ich Fragen will!
- eine weitere update - seit einigen Jahren mache ich nur
git merge
stattgit rebase
. Ja, einige Leute sagen, dass durch die Verwendungmerge
Sie haben nicht die richtige Geschichte, das ist nicht wahr. Uhr youtube.com/watch?v=1ffBJ4sVUb4 um zu verstehen, wie alles im git funktioniert ( +rebase
kann tatsächlich zerstörerisch ) Mein Punkt istgit merge
ist viel produktiver. Ich denke mal als ist der Grund, warum github ist auch mitmerge
im Sie web-interface beim Umgang mit pull-requests - es macht ein Chaos aus Ihrem Zweig der Geschichte, obwohl ich lieber rebasierung, denn es sorgt für ein sauberes git-Geschichte, der für den feature-branch arbeite ich ab. Git merge ist ideal für pull-requests, weil es eine visuelle Darstellung, wenn eine pull-Anforderung zusammengeführt wurde Meister.
- Ich Stimme voll und ganz, es ist sauberer. Für super kleine Projekte und Projekte, die ich alleine arbeiten verwende ich Stellungswechsel zu. Aber pragmatisch für Projekte mit vielen Entwicklern Begehen Häufig ist es viel pragmatischer zu verwenden
merge
sonst 10% des jeder Zeit einfach auflösen rebase Konflikte
Du musst angemeldet sein, um einen Kommentar abzugeben.
Glücklicherweise git hat einen Mechanismus für den Umgang mit genau diesem problem genannt
git rerere
- im wesentlichen, wenn Siegit rerere
aktiviert, dann wird jedes mal, wenn das lösen eines Konflikts die Tatsache, dass Sie beschlossen, die genaue Konflikt in besonderer Weise erinnert wird. Wenn der gleiche Konflikt kommt wieder hoch, die gleiche Auflösung wird automatisch verwendet. Es gibt einige hilfreiche Artikel unter:... aber im Grunde können Sie nur:
... und vergessen Sie über Sie, während Sie leichter rebasierung /Zusammenführung 🙂
git config --global rerere.autoupdate true
als gut. Auch, wenn Sie wollen, dass andere in Ihrem team, wie diese aufgenommen Auflösungen können Sie Ihre teilen .git/rr-cache-Ordner mit Ihnen. Cheers.Stellen Sie sicher, dass Sie immer die erneute basiszuordnung verwenden die
--onto
wechseln.Konflikte zu vermeiden, verwenden Sie schweben Entwicklung äste. Jeder Entwickler wird ständig Stellungswechsel Ihrer Entwicklung Zweig. Dies ist einfach, da der Entwickler weiß, was er gerade umgesetzt und sollte keine problem mit, Konflikte zu lösen. Statt der rebasierung, nur merge die endgültige version (es wird schon werden zurückgesetzt).