2017-02-26 78 views
6

Jestem na oddziale feature-x wykonuję jakąś pracę, gdy nagle napotkam problem, który powinien zostać naprawiony w innej gałęzi, hotfix.Zatwierdź jeden plik do innego oddziału

Chcę utworzyć zatwierdzenie z tą zmianą, ale w gałęzi hotfix.

Od this question Rozumiem, że standardowa procedura byłaby

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

To będzie działać, jeśli nie mają wiele zmian na oddziale feature-x już w toku, które rzucają konflikt z branży hotfix. Chcę uniknąć konieczności rozwiązywania niepotrzebnych konfliktów.

Aby tego uniknąć, pomyślałem, że mogę wyodrębnić pojedynczy plik ze schowka, jak to odnotowano na this answer. Więc procedura będzie:

# 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" 

A potem muszę wrócić do feature-x

git checkout feature-x 
git stash pop 

Podczas there's a way do przynieść plików z innego oddziału bezpośrednio, chcę wiedzieć, czy istnieje sposób, aby wyślij pliki do innego oddziału, bez tych wszystkich kłopotów. Faktyczna modyfikacja to tylko kilka znaków.

+1

Jeśli przez „bez całego tego zamieszania” masz na myśli „bez sprawdzania' 'hotfix' a później znowu funkcje x'”, to pytanie jest duplikatem [Commit plik do innego Branch Without Checkout] (http://stackoverflow.com/questions/7933044/commit-a-file-to-a-different-branch-without-checkout). (Znajdziesz tam także kilka interesujących odpowiedzi, niezależnie od tego, czy są zadowalające, nie wiem.) –

+0

Prawdopodobny duplikat [Zatwierdzenie pliku do innego oddziału bez realizacji transakcji] (http://stackoverflow.com/questions/7933044/ commit-a-file-to-a-branch-without-checkout) –

+0

Przepraszam za niewyraźny język. Bardziej odwoływałem się do mniej poleceń (bez udziału aliasu). – Veehmot

Odpowiedz

4

można popełnić zmianę feature-x i cherry-pick go w hotfix, w następujący sposób:

# 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 

Rozszerzanie odpowiedź jak na @torek komentarza, aby korzystać git-worktree, w następujący sposób:

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

Nigdy wcześniej nie użyłem wiśniowego pick-upa. Czy to * copy * lub * move * the commit? Czy zatwierdzenie będzie działać jednocześnie na 'feature-x' i' hotfix'? – Veehmot

+1

Kopiuje zatwierdzenie i tak, zatwierdzenie będzie istniało w obu gałęziach jednocześnie. – Arpit

+1

Możesz następnie zresetować 'feature-x' z' git reset HEAD^'po sprawdzeniu tej gałęzi. – merlin2011

2

Aby zatwierdzić plik z feature-x na hotfix, istnieje prosty sposób na zrobienie tego (załóżmy, że zatwierdzenie, które właśnie dodałeś na feature-x, jest oddziału 4712df727f7303bc95545d0f6a024129be97c5c2):

# on branch hotfix 
git checkout 4712d filename 
git commit