Основываясь на предыдущем предложения, это решение, которое я придумал:
решение 1 с вишней-забрать
Просто совершить одно изменение в самой отрасли:
git add --patch <files> # record every change to move to master
git commit
Перейти к мастеру, и вишневое выбрать
git stash
git checkout master
git cherry-pick <commitid>
Назад в отрасли, это может быть нормированный.
git checkout <branch>
git rebase master
Для каждого дублируют фиксации, вам будет предложено ввести:
git rebase --skip
Повторяющиеся фиксаций отфильтровываются из лоскутного установить в отрасли, и история чиста. Финал git merge
все еще может быть быстрым.
Решение 2, без фиксации в отрасли первого
Сначала извлечь все, чтобы перейти к мастеру:
git add --patch <files> # record every change to move to master
Затем перейти к мастеру совершить:
git stash --keep-index # clear the working copy only
git checkout master -m # merge the index.
git commit
И обратно в ветку, он может быть непосредственно переформирован до конца мастера:
git checkout <branchname>
git rebase master # move to branch start to the tip of master.
git stash apply # restore working copy, auto merges the changes
Solution 3, чтобы сделать клон текущего мастер филиала
В случае, если вы не возражаете, имеющих несколько рабочих копий (я всегда делал это с SVN на самом деле), есть третье решение:
mkdir ../newrepos
cd ../newrepos
git init
git remote add origin /path/to/your/repository
git fetch master:remotes/origin/master # fetch remote master to local remotes/origin/master
git checkout -t origin/master # make new "master" branch, link to remote, checkout.
git commit
git push origin master # inject the change in the original repository.
Настройка клонирования выполняется вручную здесь, потому что git clone
всегда клонирует активную ветвь.
Для более сложных ситуаций, всегда есть дополнительный сейф охранник с git diff > to-master.patch
и git apply to-master.patch
. Это позволяет вам больше свободы сбросить все, и попробуйте, пока вы не попрактитесь.
В этой ситуации мы имеем дело с однострочным исправлением в файле, который существует в обеих ветвях. Это не даст никаких конфликтов слияния и позволяет использовать некоторые ярлыки, такие как checkout -m
.
По моему опыту, 'add -p' - это то, что большинство людей хотят, когда они используют' add -i' – Dustin
Я часто использую 'git add -patch' для этих случаев, к сожалению, я также хочу сохранить некоторые изменения в рабочей копии, поэтому я не могу переключать ветви. – vdboor