Як отримати "їх" зміни в середині конфліктної бази даних Git?


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
Примітка: якщо ви перезапускаєте гілку2 на гілку1, повторення відбувається відносно гілки1, тож "їх" насправді є гілка2, а "наша" - гілка1. 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 :

Зауважте, що злиття ребаза працює, відтворюючи кожну комісію з робочої гілки вгорі гілки. Через це, коли трапляється конфлікт злиття, сторона, про яку повідомляється як наша, - це поки що перезавантажена серія, починаючи з <upstream>, а їхня робоча галузь. Іншими словами, сторони міняються місцями.

Для отримання детальної інформації читайте цю тему .


0

Якщо ви хочете витягнути певний файл з іншої гілки, просто зробіть

git checkout branch1 -- filenamefoo.txt

Це витягне версію файлу з однієї гілки в поточне дерево


35
Це, мабуть, буде поганою ідеєю посеред ребаза, оскільки це витягне файл з голови цієї гілки, а не в
окремій
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.