2015-09-12 4 views
0

Рассмотрим следующий сценарийКак работать сливаться конфликт - Git

Есть два файла

FileA 
FileB 

Я внес изменения в FILEB. В удаленном репозитории некоторые из них внесли изменения в FileA и FileB. Я выхожу из восходящего потока, и в FileA есть конфликт слияния.

Исправлен конфликт слияния, теперь, когда я проверяю git status, я вижу, что FileA поставил и FileB как измененный.

on branch master Your branch is ahead of origin/master by 1 commit. You have unmerged paths. (fix conflicts and run "git commit"). Changes to be committed: modified: FileA Unmerged paths: both modified FileB

Здесь вы можете увидеть статус FiLea в постановке состояния на слиянии терпят неудачу. Но я не модифицировал его. Теперь, когда я ставил разрешенный файл конфликта FileB и фиксировал, FileA будет там с фиксацией, но FileA фактически не тронут мной.

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

Как я могу справиться с этой ситуацией в Git.

Любая помощь очень ценится. Благодаря!

+0

Не уверен, что вы используете eclipse, но мне часто приходится «добавлять к индексу» в файле, в котором я разрешил конфликт. –

+0

@JaredSol. Так что это не появится в истории фиксации? Я использую скобки. – Wishnu

+0

Если вы совершили попытку до вытаскивания, у вас будет фиксация конфликта.Вот почему всегда лучше тянуть, прежде чем совершать. Я не уверен, что вы можете совершить без него в истории. Хотя вы, вероятно, могли бы с помощью командной строки каким-то образом. У меня просто не было необходимости. –

ответ

1

При разрешении конфликта слияния git предоставит вам информацию для ручного разрешения конфликтов. В вашем случае git сообщает вам, что удаленный мастер также содержит изменение в FileA, это может быть полезно, если изменения в удаленном FileB зависят от изменений в FileA, которые вам, возможно, придется учитывать при ручном разрешении конфликта в FileB.

После того, как вы разрешили конфликт, вам необходимо провести как FileA, так и FileB. Если FileA поставлен без каких-либо изменений не будет частью слияния совершить (слияние фиксации не будет включено в истории фиксации для FileA)

ПРИМЕЧАНИЕ:, если у вас есть преобразование LF/CRLF применяется к ваши файлы они могут содержать пробельные изменения при постановке, и поэтому они будут включены в фиксацию слияния.

Вы можете обновить локальное репо, заменив изменения на свою ветку, но вам все равно нужно отслеживать любые зависимые изменения, внесенные в это обновление.

+0

Могу ли я избежать этого FileA, входящего в историю фиксации? – Wishnu

+0

Вам нужно сгенерировать FileA, когда вы разрешили конфликт, но если вы не внесли никаких изменений в FileA при разрешении конфликта, это не будет частью коммита слияния. Звучит странно, чтобы создать файл, который не будет частью коммита, но в настоящее время git должен быть явно проинформирован обо всех файлах, которые являются частью конфликтного слияния. – joran

+0

Точно, я размещаю FileA, но это есть в истории фиксации вместе с разрешенными файлами. – Wishnu

0

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

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

Подробнее о ветвях на Git here.

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