Вы должны слиться с мастером только один раз, в конце жизни ветки.Идея ветки функции / темы заключается в том, что она содержит только изменения, относящиеся к этой функции;вы теряете это, когда вы постоянно сливаетесь с мастером.(Вы можете прочитать, что Джунио Хамано, сопровождающий git, говорит о ветвях .)
Вы можете выполнить «практическое» слияние, которое вы выбросите, и используйте git-rerere
дляGit автоматически записывает ваши разрешения слияния, чтобы их можно было использовать повторно, когда вы действительно готовы к слиянию.См. http://www.kernel.org/pub/software/scm/git/docs/git-rerere.html для справки и учебника.Это действительно круто, потому что это позволяет вам выполнять работу слияния, не фиксируя ее где-либо явно, а затем возвращать эту работу «волшебным образом», когда вы действительно готовы создать слияние.Таким образом, вместо одного большого болезненного слияния в конце, вы можете выполнить несколько небольших, надеюсь, более простых, промежуточных «тренировочных» слияний по пути.Грубо говоря:
# Enable rerere
git config --global rerere.enabled 1
# Start a feature branch
git checkout -b feature
# Hack hack hack
git commit
git commit
# Practice merge
git merge master
# ...then throw the merge commit away, the work is saved by rerere
git reset --hard HEAD^
# Hack hack hack
git commit
# Really merge to master, reusing any saved work from rerere
git checkout master
git merge feature
git branch -d feature
См. Также http://progit.org/2010/03/08/rerere.html для другого урока.
Вы также можете периодически перебрасывать ветку своей темы поверх master, а затем просто выполнять слияние вend.
Чтобы справиться с ситуацией, подобной той, в которой вы находитесь в данный момент, с ветвью темы (скажем, с именем feature
), в которой есть ряд слияний от основного, смешанных с различными выполняющимися коммитами,Самый простой подход - сделать сжатое слияние для создания «объединенного» рабочего дерева, а затем создать новый коммит (или серию коммитов) для main.Например:
git checkout master
git merge --squash feature
git commit
Это создаст один коммит, представляющий состояние дерева в начале элемента, объединенного с мастером.
Конечно, вы также можете просто сделатьрегулярное слияние с master
для этого изменения, оставляя грязную историю feature
настоящего, и просто работать более аккуратно в будущем.например, просто
git checkout master
git merge feature
и двигаться дальше.