2010-04-22 5 views
2

Я относительно новичок в Git, и мне все еще не очень удобно. Прямо сейчас я ищу команду/options/magic, которая может сделать текущую ветку похожей на другую ветку; то есть объединить их, но когда возникает конфликт, всегда выбирать разницу в ветке, которая объединяется в текущую.Git: Сделайте одну ветку точно как другой

Мое положение таким образом; У меня есть стабильное (ish) приложение в ветке «master». У меня также есть еще одна ветвь, называемая «особенностью». Я в основном хочу внести изменения/дополнения/удаления в функцию, пока мне не понравится новая функция, над которой я работаю. Как только я почувствую, что он готов, я хочу, чтобы главная ветвь была похожа на ветвь функции.

Я знаю, что это, вероятно, не самая лучшая практика, но, как я уже сказал, я новичок в Git. Я планирую научиться делать более сложные вещи в будущем, но на данный момент это все, что мне нужно.

Спасибо, ТАК!

+0

Возможный дубликат [команды мерзавца для создания одной ветви как другой] (HTTP: // StackOverflow.com/questions/4911794/git-command-for-making-one-branch-like-another) –

ответ

2

Отрасли - это только указатели в пределах графика коммитов. Вы можете git-reset филиал, чтобы указать куда угодно, просто убедитесь, что вы проверяете предполагаемую ветку, прежде чем совершать какие-либо дальнейшие коммиты.

+0

Иными словами, я нахожу идентификатор фиксации последнего коммита, который я сделал в ветви функции, переключился на главную ветвь и выполнил сброс git - применил этот идентификатор фиксации, сделав HEAD таким же, как ветвь функции содержание? Это то, что происходит? –

+0

Да. Я должен подчеркнуть, что это только один способ сделать это; во многих случаях вам лучше делать это с «традиционным» процессом слияния с ветвью функций обратно к вашему хозяину. Я бы добавил, что слияния в git довольно умны; они не похожи на то, как дела обстоят в рамках CVS и SVN. – crazyscot

4

Извините! Не читал весь путь до конца, прежде чем ответить ...

git checkout master 
git merge feature 

Это будет работать без особых усилий, если вы не сделали никаких изменений в master, так как вы разветвленными feature от него.

И что вы пытаетесь сделать именно так, как предполагается, что ветвление и слияние будут работать. Разработайте свои функции на ветке, когда у вас она стабильная и работает так, как вы хотите, чтобы она работала, объедините ее обратно в главную ветку.

+0

Что делать, если я сделал изменения, чтобы справиться с тем, что может вызвать конфликт? Наверное, я должен был упомянуть об этой возможности, потому что возможно, мне, возможно, придется внести что-то маленькое. –

+0

@ G. Мартин AFAIK Не должно быть проблемы. Выполнение 'git checkout master' в ветви функции вызовет проблемы слияния. После того, как вы решили, что функция git merge на главной ветке не должна иметь никаких проблем. –

3

Я знаю, что это было предложено некоторое время назад, и есть несколько ответов уже, но я думал, что я хотел бы предложить мои 2 цента:

Если вы хотите, чтобы сделать git merge и вы не хотите беспокоиться о конфликтах слияния (всегда предпочитайте изменения в одной ветке над другой), тогда вы можете использовать git merge branch -X ours и git merge branch -X theirs. Об этом больше поясняется в https://stackoverflow.com/questions/13594344.

Я бы сказал, однако, что здесь есть смысл здесь git rebase. Некоторые плюсы/минусы находятся на Rebase vs. Merge page. Слияние предназначено, чтобы сохранить историю событий, которые произошли, включая само слияние, но из-за звука вашего вопроса кажется, что вы только хотите отслеживать события в разработке приложений, скрывая тот факт, что вы когда-либо имели отдельная ветвь в первую очередь.

0

Принятый ответ («Ветки - только указатели ...») не подходит для меня, потому что мне нужна не только моя ветка, чтобы выглядеть как другая ветка - мне нужно сделать это, применив только другие коммиты (не теряя какие-либо из обязательств в текущей истории моего филиала).

Мне понравился этот подход для создания филиала A выглядеть филиала B:

git checkout B git diff A > patch_to_make_A_like_B git checkout A git apply patch_to_make_A_like_B

rm patch_to_make_A_like_B в конце.)

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