2016-10-22 2 views
1

Ich muss einen leeren verwaisten Zweig von einem anderen entfernten Zweig erstellen.
Das Problem ist, wenn ich in den übergeordneten Zweig auschecken, wird es die Dateien ziehen, und diese werden dann in der verwaisten Zweig enthalten sein. Oder ist es wichtig, aus welchem ​​Zweig ein anderer Zweig erstellt wird, wenn ich diese Änderungen zu einem bestimmten Zweig hinzufügen möchte?Kann Checkout in entfernte Zweigstellen übertragen werden, ohne Dateien zu ziehen?

Gibt es eine Möglichkeit, einen verwaisten Zweig von einem Zweig zu erstellen, ohne in diesen Zweig eingecheckt zu werden? Nach dem Remote-Zugabe, versuchte ich

laufen
git checkout --orphan orphan_branch parent_branch 

aber es gibt mir eine Fehlermeldung „Cannot update paths and switch to branch 'orphan_branch' at the same time.

Oder ist es möglich, „git remote add origin giturl“ und aufzuwickeln in einem Zweig mit Ausnahme des Kapitäns Zweig laufen ?

+0

Was meinen Sie mit dem Auschecken einer neuen Zweigstelle aus einer Zweigstelle ohne ihre Dateien? Sind Sie auf der Suche nach diesem: http://stackoverflow.com/a/13969482/4233593 –

+0

Sie meinen, Sie möchten eine leere Orphan-Zweigstelle aus einem nicht leeren Zweig erstellen? Wenn der Elternzweig leer ist, woher stammen diese Dateien? –

+0

Ich glaube, dass Link meine Fragen beantwortet. Nur - wenn ich den verwaisten Zweig wieder zusammenführe, möchte ich nicht, dass er die Dateien löscht. Und ja, ich möchte einen leeren Zweig von einem nicht leeren Zweig erstellen. Und das Problem ist, wenn Sie in die Filiale auschecken, zieht es alle Dateien – HamletHub

Antwort

2

Wenn Sie gehen wollen:

x--x--x--x--x (origin/master) 
     \ 
     Y--y--y (origin/abranch) 

zu einem lokalen Waisen Zweig:

Y--y--y (abranch) 

Sie müssen:

auf Ihrem Fall Je könnten Sie finden Y mit "how to find first commit of specific branch" (den ersten von origin/abranchnicht in origin/master begehen):

git log origin/master..origin/abranch --oneline | tail -1 

Wenn origin/abranch hat wie oben gezeigt eine einzelne Merge-Base und dann git merge-base, um 012 zu finden(Eltern begehen von Y, da cherry-pick beinhaltet nicht die erste selbst begehen):

git cherry-pick $(git merge-base origin/master origin/abranch)..origin/abranch 

Oder ist es unabhängig davon, welcher Zweig ein weiterer Zweig von erstellt wird, wenn ich diese Änderungen wieder hinzufügen möge zu einer bestimmten Branche?

Eine Verzweigung ist nur ein Zeiger und Hilfe, die auf alle Commits verweist, auf die über den HEAD zugegriffen werden kann. Wenn eine Verzweigung von einer anderen erzeugt wird, sind alle anderen Verzweigungsverpflichtungen ebenfalls Teil der neuen Verzweigung.
Siehe "Using branches" und "Git Branching - Branches in a Nutshell".

Es ist am besten, einen Zweig in seinem dem Zweig zu verschmelzen zurück kam es aus (nicht gerade ein „Eltern“ Zweig, da es kein Konzept der Vorfahren für Verzweigungen)

x--x--x--x--x--M (master) 
    \   /
    Y--y------y (abranch) 

Wenn Sie das nicht tun, das bedeutet, dass oyu cherry-pick oder rebasing --onto ist, was komplexer ist und das Duplizieren von Commits riskiert.
, die aus gehen würde:

x--x--x--x--x   (master) 
     \ 
     p--p--p  (anotherbranch) 
      \ 
       Y--y--y (abranch) 

To (mit git rebase --onto master $(git merge-base anotherbranch abranch) abranch):

   Y'--y'--y' (abranch) 
      /
x--x--x--x--x   (master) 
     \ 
     p--p--p   (anotherbranch) 

Dann können Sie schnell vor- abranch-master.

, um einige mehr mit Niederlassungen finden Sie unter „Learn Git Branching“ zu experimentieren.

+0

Sie würden den Cherry-Pick mit 'Y^.. Herkunft/Abranch 'ausführen, um Commit' Y' selbst einzuschließen. – torek

+0

Richtig! Also ... git merge-base dann? – VonC

+0

Wenn es eine einzelne Zusammenführungsbasis (wie in dieser Zeichnung) gibt, ja. – torek

Verwandte Themen