2017-02-26 3 views
6

Ich bin auf Zweig feature-x machen einige Arbeit, wenn ich plötzlich ein Problem, das wirklich auf einem anderen Zweig, hotfix gelöst werden sollte.Commit eine einzelne Datei zu einem anderen Zweig

Ich möchte ein Commit mit dieser Änderung erstellen, aber auf dem hotfix Zweig.

Von this question Ich verstehe, dass das Standardverfahren zu

# On branch feature-x 
git stash 
git checkout hotfix 
git stash pop 
git add -A 
git commit -m "Fixed issue #562" 

würde das funktionieren würde, wenn ich nicht viele Änderungen auf dem Zweig feature-x bereits im Gang habe, die hotfix einen Konflikt mit dem Zweig werfen würde. Ich möchte vermeiden, unnötige Konflikte lösen zu müssen.

Um das zu vermeiden, dachte ich, dass ich nur eine einzelne Datei aus dem Versteck extrahieren könnte, wie auf this answer notiert. So würde das Verfahren sein:

# On branch feature-x 
git stash 
git checkout hotfix 
git checkout [email protected]{0} -- <src/buggyfile.xxx> 
git add -A 
git commit -m "Fixed issue #562" 

Und dann sollte ich gehen Sie zurück zu feature-x

git checkout feature-x 
git stash pop 

Während there's a way- Dateien bringen von einem anderen Zweig direkt, ich möchte wissen, ob es einen Weg gibt, um senden Sie Dateien an einen anderen Zweig, ohne all diesen Ärger. Die tatsächliche Änderung besteht nur aus ein paar Zeichen.

+1

Wenn von „ohne diesen alle Mühe“ Sie bedeuten „ohne Check-out' hotfix' und später 'Feature-x' wieder“, dann ist diese Frage ein Duplikat [Commit eine Datei zu einem anderen ist Zweig ohne Checkout] (http://stackoverflow.com/questions/7933044/commit-a-file-to-a-different-branch-without-checkout). (Sie werden dort auch einige interessante Antworten finden. Ob irgendwelche zufriedenstellenden, weiß ich nicht.) –

+0

Mögliches Duplikat von [Eine Datei an eine andere Filiale ohne Checkout übergeben] (http://stackoverflow.com/questions/7933044/ Commit-a-Datei-zu-einem-anderen-Zweig-ohne-Kasse) –

+0

Ich entschuldige mich für die vage Sprache. Ich habe mich mehr auf weniger Befehle bezogen (ohne einen Alias ​​einzubeziehen). – Veehmot

Antwort

4

Sie die Änderung in feature-x und cherry-pick in hotfix begehen können, wie folgt: Kommentar

# On branch feature-x 
git add <file> 
git commit -m "Fixed issue #562" // Note commit-id 
git checkout hotfix 
git cherry-pick <commit-id> 
git push origin hotfix 

Erweiterung der Antwort per @torek, git-worktree zu verwenden, wie folgt:

git worktree add -b hotfix ../hotfix origin/master 
cd ../hotfix/ 
git add <file> 
git commit -m "Fixed issue #562" 
git push origin hotfix 
+0

Ich habe noch nie einen Kirschpflücker benutzt. Würde * das * kopieren * oder * den Commit verschieben? Wird das Commit gleichzeitig auf 'feature-x' und' hotfix' gesetzt? – Veehmot

+1

Es kopiert das Commit und ja das Commit wird in beiden Zweigen zur gleichen Zeit existieren. – Arpit

+1

Sie können dann 'feature-x' mit' git reset HEAD^'nach dem Auschecken dieser Verzweigung zurücksetzen. – merlin2011

2

Um eine Datei von feature-x zu hotfix zu committen, gibt es einen einfachen Weg, dies zu tun (angenommen, das Commit, das Sie gerade hinzugefügt haben auf feature-x Branch ist 4712df727f7303bc95545d0f6a024129be97c5c2):

# on branch hotfix 
git checkout 4712d filename 
git commit 
Verwandte Themen