2012-04-12 2 views
0

Я ищу несколько советов о том, как я могу достичь следующих с помощью Git:Управление ветвей Git

Филиалы: мастер (стабильная ветка) нестабильным

Все работы выполняются в нестабильной отрасли, в который код может не работать в любой момент, но я нажимаю на него, чтобы сохранить свой прогресс. Когда я достигаю стабильной точки, я хочу, чтобы мастер точно такой же, как неустойчивый. Я не хочу проходить все свои изменения при слиянии и выбирать состояние нестабильной ветви, я просто хочу, чтобы он использовал состояние неустойчивой ветви и делал мастер точно таким же. Возможно, потребуется удалить некоторые файлы, добавить некоторые файлы, изменить некоторые файлы. Я не хочу копировать все коммиты из нестабильной в master, но просто добавьте одну новую фиксацию со всеми изменениями.

Единственными двумя способами, которые я видел, чтобы сделать это успешно являются

git checkout master 
git reset --hard unstable 

, но это, кажется, чтобы скопировать все коммиты в нестабильным, а затем я не могу толкать хозяина к удаленному (отвергнут дистанционный) или

git checkout master 
rm -rf ./* 

Затем скопируйте все файлы из другой ветви и совершите.

Должен быть лучший способ сделать это или, может быть, совсем другой подход?

+0

взгляните на [git flow] (http://nvie.com/posts/a-successful-git-branching-model/), это очень интересно – KurzedMetal

ответ

0

git checkout master

git merge unstable

тогда вы будете иметь слияние совершить, и ваше состояние в мастер будет точно так же с неустойчивой ветви.

Как только вы думаете, что ваше слияние прерывается, и вы можете просто отбросить одну фиксацию (фиксацию слияния) и вернуться в исходное состояние. ребенок вещь :)

4
git checkout master 
git merge --squash unstable 
git commit 

Сделает одну фиксацию со всеми изменениями (совершает в нестабильной ветке) сделано с момента последнего слияния.

4

Похоже, что master не изменяется во время разработки в unstable. У вас есть два варианта, в зависимости от того, как вы хотите, чтобы последнее дерево выглядело.

Допустим, вы начинаете с этим деревом:

A---B   (master) 
    \ 
     C---D (unstable) 

Если вы хотите master просто быстро вперед unstable (один ствол, master и unstable указывают на то передай):

git checkout master 
git rebase unstable 

Результирующее дерево:

A---B---C---D (master, unstable) 

Если вы хотите совершить слияние (unstable ответвляется, а затем сливается обратно в master):

git checkout master 
git merge --no-ff unstable 

Итоговое дерево:

A---B-------D' (master) 
    \ /
     C---D  (unstable) 

Update Как @KurzedMetal был достаточно любезен, чтобы указать на то, вы не нужно ни одного из этих вариантов. Думаю, его ответ правильный. Дерево после git merge --squash unstable master; git commit будет выглядеть следующим образом:

A---B---------E (master) 
    \ 
     C---D  (unstable) 

Обратите внимание на отсутствие связи между master и unstable. После этого, вы можете сбросить unstable с:

git checkout unstable 
git reset --hard master 

Результирующее в:

A---B---E  (master, unstable) 

Я не уверен, почему вы хотели бы использовать эту стратегию, хотя. Потеря всей этой истории кажется мне неразумной.

+0

Я думаю, что он не хочет ни одного из этих результатов: «Я не хочу копировать все коммиты из нестабильного в master, но просто добавьте один новый коммит со всеми изменениями». Он хочет, чтобы одна фиксация со всеми изменениями, вот что делает сквош. Хорошая информация tho +1 – KurzedMetal

+0

Ох, хм. Пропустил это. –

Смежные вопросы