Как получить «свои» изменения в середине противоречивой Git ReBase?

349

У меня конфликтующие ветки, ветка 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
Ондра Жижка
источник
41
Примечание: если вы перебазируете branch2 на branch1, воспроизведение происходит относительно branch1, поэтому «их» на самом деле - branch2, а «ours» - branch1. git.661346.n2.nabble.com/…
Мистер Фуз
2
См. Также github.com/git/git/commit/…
VonC
1
Это стоило мне около 20 часов усердной работы. Я честно думал, что "наш" всегда будет рабочей копией.
Теодор Р. Смит

Ответы:

496

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

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 работает путем воспроизведения каждого коммита из рабочей ветви поверх ветви. Из-за этого, когда возникает конфликт слияния, сторона, о которой сообщается как наша, является перебазированной серией, начинающейся с <upstream>, а их рабочая ветвь. Другими словами, стороны поменялись местами.

Для более подробной информации читайте эту ветку .

Игель
источник
0

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

git checkout branch1 -- filenamefoo.txt

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

Адриан Корниш
источник
35
Это, вероятно, было бы плохой идеей в середине перебазирования, поскольку оно вытягивало бы файл из головы той ветви, а не в отсоединенную головную точку, в которой вы бы находились в конфликтном состоянии перебазирования
Клинт