2016-12-10 2 views
2

У меня есть 2 ветви А и ВGit слияния: слияние файла с другим файлом

В филиале А я переименовал Thing.java в ThingImpl.java, и переписал Thing.java так, что теперь интерфейс. Я также добавил немного к ThingImpl.java.

В филиале BI редактировал класс в Thing.java

Теперь я пытаюсь объединить мои изменения из ветви А в ветви В, и он пытается объединить свои изменения в интерфейс Thing.java вместо применения diff to ThingImpl.java, что и должно делать. Есть ли способ сказать git сделать это?

ответ

1

Это зависит от содержания этих файлов и их размера.

Вы можете поручить GIT слияние обнаружить труднее переименовывает с:

git merge --no-ff -Xrename-threshold=15 -Xpatience -Xignore-space-change A 

-Xrename-threshold=15 бы для того, чтобы контролировать, что сходство 15% уже достаточно рассмотреть два файла переименовать кандидатов.

Но это не будет охватывать каждый прецедент, как показано в «git fails to detect renaming», а также в «git merge with renamed files».

+0

Это не сработало для меня. Думаю, Thing.java слишком сильно отредактирован в обеих ветвях. – ario

+0

Точно: если содержимое слишком отличается, git не обнаружит переименование. – VonC

+1

Я думаю, что это не работает, потому что теперь есть файл Thing.java в обеих ветвях, и переименовать обнаружение даже не происходит. – j6t

0

Я предполагаю, что нет никакого способа узнать, Git именно файл истории графа выглядит, так как он опирается на свой собственный дифф: Getting Git to follow renamed and edited files

я, вероятно, следовало бы совершили переименование ThingImpl.java отдельно от внесения изменений на ThingImpl.java в филиале A, чтобы избежать этой проблемы.

Как это было, мне пришлось слить вручную.

1

Когда вы объединяете ветвь A в ветвь B, ожидаемым результатом является то, что есть файл Thing.java, который идентичен версии в ветке A, и файл ThingImpl.java, который в основном такой же, как в ветви A, но с изменениями, внесенными в интегрированную ветвь B.

Самый простой заключается в следующем:

git checkout branch_B 
git mv Thing.java ThingImpl.java 
git commit -m "A technical change to make the upcoming merge possible." 
git merge branch_A 

Теперь вы не зависят от того, что переименовывать пинков обнаружения в

Если строить терпит неудачу после вспомогательной фиксации и до слияния, вы можете изменить свой билд. процедуру для переименования файла.

Смежные вопросы