использование команды git merge - PullRequest
3 голосов
/ 01 ноября 2010

Я не могу сделать правильное слияние веток в git.Например, у меня есть две ветви:

         C - D - E  my_branch
       /    
A - B -  F - G - K  *master

Теперь я нахожусь на мастере.После "git merge my_branch" я получил у master что-то вроде этого:

A - B - C - D - F - G - K - E - M  *master

(M - merge commit) Но я кроме этого:

A - B - F - G - K - M

Это важно, потому что на my_branch Iчасто делает не компилируемые коммиты, только для себя;и я не хочу подталкивать их к хозяину.Как сделать слияние, что я хочу?

Ответы [ 2 ]

3 голосов
/ 01 ноября 2010

Я думаю, что вы запрашиваете способ сделать один коммит, который выглядит как , как будто вы выполнили всю работу в своей личной ветке за один раз.Обратите внимание, что это не «коммит слияния» в терминологии git;это просто нормальный коммит.

Редактировать: здесь нужно отметить одну вещь: это означает, что git не хранит никаких сведений о слиянии, поэтому он начинает становиться неловким, если вы хотите продолжать использовать свою личную веткуоткуда ты это слил.Это идеально подходит для экспериментальных веток, которые не используются снова после сдавленного «слияния».

Вы можете сделать именно то, что вам нужно, используя git merge --squash (а затем зафиксировать результат, используя git commit).Это даст вам желаемый результат:

A - B - F - G - K - M

Что я обычно делаю, это сначала манипулирую моей личной веткой (используя git rebase -i master), чтобы настроить коммиты так, чтобы они выглядели именно так, как я хочу, а затем использоватьgit merge чтобы привести их к хозяину.Таким образом, я также могу сделать:

A - B - F - G - K - M1 - M2 - M3

, где M1, M2 и M3 - это переделка всей работы в личной ветке, но в некотором смысле, что также имеет смысл източка зрения мастер ветки.Это полезно, поскольку сохранение отдельных коммитов и их логическое разделение удобно при использовании истории изменений в будущем.

0 голосов
/ 01 ноября 2010

Используйте опцию --squash для git merge: она возьмет вашу ветку, раздавит ее в один коммит и затем объединит.

...