2009-08-18 17 views
32

Używam Git do śledzenia źródła dokumentacji lateksu. Chcę, aby główna gałąź była pełna dokumentów, które są odpowiednie dla użytkownika końcowego, więc gdy ktoś czegoś potrzebuje, mogę po prostu przejść do gałęzi głównej, skompilować i rozdać dokument.Git: Połącz z mistrzem, jednocześnie automatycznie wybierając nadpisanie plików głównych z odgałęzieniem

Tworzę nowe oddziały, gdy podręcznik wymaga poważnej aktualizacji. Ale, gdy instrukcja zostanie zatwierdzona, musi zostać scalona z powrotem do wzorca. Podczas łączenia z oddziału do mistrza chciałbym przekazać jakąś komendę Git powiedzieć: „zapomnij scalania, wystarczy użyć pliku z oddziału nadpisać plik w mistrza”. Czy jest jakiś sposób na zrobienie tego? W szczególności chcę uniknąć otwierania narzędzia scalania za każdym razem. Z góry dziękuję.

+0

Możesz zrobić interaktywne scalanie i podawać je łyżką (z 'yes'), niezależnie od odpowiedzi, gdy zapyta, co robić ... –

+1

@ r-martinho-fernandes: Co to jest polecenie interaktywnego scalania? –

Odpowiedz

46

lekceważyć master, gdy masz branch wyrejestrowany następnie:

git merge master --strategy=ours 

http://schacon.github.com/git/git-merge.html

Jako 'Lingwista komputer' skomentował tutaj, będzie to „ignoruj ​​wszystko od 'mistrza', nawet jeśli ma zmiany w nowych, niezależnych plikach ". Więc jeśli nie jesteś OP i chcesz bezpieczniejszego scalania, które nie jest tak, jak PO mówi "zapomnij o łączeniu", użyj tego znakomitego bezpiecznego polecenia z "Komputerowego lingwisty", a także jego komentarz do góry, więc dostaje kredyty.

git merge -s recursive -X theirs branch 
+1

Z tego miejsca: http://stackoverflow.com/questions/366860/when-would-you-use-the-different-git-merge-strategies, this says: Ours == Chcę przyciągnąć inną głowę, ale rzucę wszystkie zmiany wprowadzane przez głowę. Jest więc przeciwieństwem tego, co OP chciał. – Amala

+4

Jeśli jesteś w gałęzi i 'git merge master --strategy = ours', to przechowuje zmiany oddziału. (co chce OP) Ale jeśli jesteś w stanie mistrzostwa i używasz "naszych", to utrzymujesz mistrzostwo. (naprzeciwko) – Robert

+4

Z mojego odczytania pytania, Mika chce połączyć gałąź w master, utrzymując stan gałęzi, czyli 'git merge branch' na master, więc --strategy = nasz jest przeciwieństwem tego, co chce –

1

Wierzę, że można to zrobić ze strategią scalić „nasz”:

git checkout branch 
git merge -s ours master 

Ale to nie robi dokładnie to, co chcesz: to nadpisać zawartość bieżącym gałęzi roboczej branch, a czego chcesz, to uzyskać tę samą zawartość na master. To, czego naprawdę chcesz, to strategia scalania theirs, i dla tego wskazuję ci na this similar question, żeby to zrobić. W praktyce to sprowadza się do resetowania master do punktu na branch.

13

W wersji 1.7.1 Git można użyć "-Xtheirs" do scalenia w samej gałęzi.

Na przykład, jeśli zaczniesz w głównej gałęzi, począwszy od mistrza

git checkout -b editBranch
-- edit your files --
git add .
git commit -m "Updated the files"
git checkout master
git merge -Xtheirs editBranch

Inny sposób, że widziałem to zrobić w oparciu off this post to zrobić twardy reset wyłączyć editBranch . Na przykład:

git checkout -b editBranch
-- edit your files --
git add .
git commit -m "Updated the files"
git checkout master
git reset --hard editBranch

myślę, że ten drugi sposób może być lepiej grać, ale nie miałem okazję bawić się z nim jeszcze za mało.

+0

dzięki. Będę musiał zaktualizować git w domu i sprawdzić to. Bardzo doceniane. – Mica