2017-04-22 1 views
0

Bei der Verwendung von Git-Cherry-Pick, treten Konflikte auf.
die Konfliktursache durch den Zielzweig ist kurz vor dem Arbeitszweig.
Mangel an etwas Commit, ich kann nicht cherry-Pick meine neue Commit in den Zielzweig.
die Frage ist, wie kann ich finden, welche Konflikt zu verpflichten, wenn ich cherry-Pick meine neue Commit zu Ziel-Zweig, die fehlende Commit ist, und listet die Confilct-Commit-ID?bei der Verwendung von git cherry-pick, Wie können wir meine commit, Konflikt mit denen commit?

Es tut mir leid für mein Pool Englisch.

Branch A, whith commit 1,2,3,4,5,6 
Branch B, with commit 1,3 

commit 6 ist ein assoziiertes mit 4. begehen, wenn I kirsch Pick 6 B begehen Zweig, der Konflikt auftreten.

Gibt es irgendeine einfache Möglichkeit, herauszufinden, welche assoziiertes Commit commit 6. so dass ich das Commit kirsch auswählen können (wie commit 4) und als kirsch Pick 6 commit statt commit 4 & 5 beide.

Vielen Dank für alle.

+0

http://stackoverflow.com/q/42531657/2303202 – max630

+0

@SITU was meinen Sie verpflichten 6 ist ein Partner mit Commit 4? Meinst du, 4 und 6 ändern die gleichen Dateien oder 6 wird von 4 zusammengeführt? BTW, auch wenn es Konflikte während der Rebase gibt, können Sie die Konflikte manuell oder automatisch lösen, um den Cherry-Pick zu beenden. Und es wird deutlicher, wenn Sie Ihre Zweigstruktur grafisch darstellen. –

+0

ändern Sie die gleichen Dateien. wie @Mort sagen, ich möchte einen effizienteren Weg finden – SITU

Antwort

0

Wenn Sie das Commit finden wollen, welches Original hinzufügen/ändern Sie eine Datei auf Zweig A vor Cherry-Pick. Sie können:

git log B..A filename 

Dieser Befehl gibt die Commits, die die Datei und die Commits nur verzweigen A gehört geändert. Sie können frühestens im Boden des Ausgangs begehen finden, und dann-Kirsche pflücken diese B auf Zweig begehen:

git checkout B 
git cherry-pick <the earliest commit you found> 
0

Ich wollte deine Frage bearbeiten, aber die Bearbeitung war so vollständig, dass ich deine ursprüngliche Frage umgeschrieben hätte.

Vielleicht ist es diese:

„Wann git cherry-pick A versucht, erhalte ich einen Konflikt Dieser Konflikt ist, weil B zu begehen, ein Vorfahre von A ist nicht in dem Zielzweig und ohne sie begehen A Ergebnisse in massiv. Konflikte im Zielzweig. Wie identifiziere ich commit B? "

Dies ist keine Gitfrage, dies ist eine allgemeine Revisionssteuerungsfrage. Es kann nur einen Commit geben, der verhindert, dass A sauber (oder sogar mit kleinen Konflikten) in den Zielzweig geht oder es mehrere Commits gibt, die A blockieren. Sehen Sie sich die Konflikte an, wenn Sie die Auswahl treffen, und sehen Sie sich alle Dateien an, die in A geändert wurden, und machen Sie jeweils eine git log A -- <file> und versuchen Sie herauszufinden, was diesen Konflikt beheben würde. Versuchen Sie dann, verschiedene Kombinationen git cherry-pick B A zu pflücken, bis Sie etwas gefunden haben, das funktioniert.

+0

vielen Dank. das ist ein Weg, um herauszukommen.Aber wenn A große Dateien geändert hat, ist es zu schwierig, dies zu tun. besonders viele Commit ist mit A. – SITU

+0

assoziieren. Harte Probleme haben harte Lösungen. In Ihrem obigen Beispiel ist der programmatische Ansatz zur Lösung des Problems, alle Commits nicht in 'B':' (2,4,5) 'zu finden, und versuchen Sie alle Kombinationen von ihnen (einschließlich mehrerer) um zu sehen, was macht' 6' geh rein. – Mort