Как получить «свои» изменения в середине конфликтующего Git rebase? - PullRequest
320 голосов
/ 16 ноября 2011

У меня есть конфликтующие ветви, ветвь 2 ответвляется от ветви 1.

Скажем, при перебазировании branch2 на текущий branch1, при разрешении конфликтов я решаю взять некоторые (не все) "их" (т.е. branch1) файлов как есть.Как мне это сделать?

Я пытался:

git checkout branch1:foo/bar.java
fatal: reference is not a tree: TS-modules-tmp:foo/bar.java

git checkout refs/heads/branch1:foo/bar.java
fatal: reference is not a tree: refs/heads/TS-modules-tmp:foo/bar.java

Ответы [ 2 ]

449 голосов
/ 29 ноября 2012

Вы хотите использовать:

git checkout --ours foo/bar.java
git add foo/bar.java

Если вы перебазируете ветку feature_x против master (то есть запускаете git rebase master в то время как на ветке feature_x), во время перебазировки ours относится к master и theirs к feature_x.

Как указано в git-rebase документах :

Обратите внимание, что слияние rebase работает путем воспроизведения каждого коммита из рабочая ветка сверху ветки. Из-за этого, когда возникает конфликт слияния, сторона, заявленная как наша, до сих пор перебазированная серия, начиная с , а их рабочая ветка. Другими словами, стороны меняются местами.

Подробнее читать эту тему .

0 голосов
/ 16 ноября 2011

Если вы хотите извлечь конкретный файл из другой ветви, просто выполните

git checkout branch1 -- filenamefoo.txt

Это перетянет версию файла из одной ветви в текущее дерево.

...