Как решить "Запись [имя файла] не обновляется. Не удается объединить"? - PullRequest
1 голос
/ 01 декабря 2009

Файл не может быть объединен. Как мне слить его с Git?

Ответы [ 2 ]

2 голосов
/ 01 декабря 2009

Сообщение об ошибке будет ( Git Faq ):

fatal: Entry 'frotz' not uptodate. Cannot merge.

Это означает, что у вас есть локальные модификации 'frotz', которые будут потеряны при оформлении заказа. Вы можете задать опцию '-m' для git checkout, что позволит выполнить трехстороннее объединение.

Иногда решение заключается в фиксации.

также показано в git checkout.

-m
--merge

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

Таким образом, процесс слияния будет:

git checkout -m mytopic
Auto-merging frotz

После этого трехстороннего слияния локальные изменения не зарегистрированы в вашем индексном файле, поэтому git diff покажет вам, какие изменения вы внесли с момента появления новой ветви.

Когда возникает конфликт слияния во время переключения ветвей с параметром -m, вы увидите что-то вроде этого:

$ git checkout -m mytopic
Auto-merging frotz
ERROR: Merge conflict in frotz
fatal: merge program failed

На этом этапе git diff показывает изменения, аккуратно объединенные, как в предыдущем примере, а также изменения в конфликтующих файлах.
Отредактируйте и разрешите конфликт и пометьте его как git add как обычно:

$ edit frotz
$ git add frotz
1 голос
/ 01 декабря 2009

Чтобы объединить файлы в git:

  • Анализ выходных данных попытки слияния: вы должны увидеть строку, сообщающую, что при объединении файла x было CONFLICT, и что вам следует исправить этот конфликт, прежде чем продолжить слияние.
  • Найдите и откройте соответствующий файл в текстовом редакторе (при условии, что это не двоичный файл, это другая история).
  • Поиск маркеров конфликта в файле (поиск <<<).
  • Для каждого конфликтующего раздела удалите код, который больше не имеет смысла, или отредактируйте его вручную, пока не получите файл, который имеет смысл.
  • Вернуться в командную строку: git add filewithconfict
  • Завершить слияние коммитом: git commit -m "Merged master branch"

Вот пример сеанса слияния:

Last login: Mon Nov 30 17:51:55 on ttys002
KidA% cd Desktop 
KidA% mkdir merge.git
KidA% cd merge.git 
KidA% git init
Initialized empty Git repository in /Users/jkp/Desktop/merge.git/.git/
KidA% echo "foo" > test.file
KidA% git add *
KidA% git commit -m "Initial commit"
[master (root-commit) 55f61fc] Initial commit
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 test.file
KidA% git branch
* master
KidA% git checkout -b topic
Switched to a new branch 'topic'
KidA% echo "bar" > test.file  
KidA% git commit -a -m "Topic commit"
[topic 6c524f3] Topic commit
 1 files changed, 1 insertions(+), 1 deletions(-)
KidA% git checkout master
Switched to branch 'master'
KidA% echo "foobar" > test.file      
KidA% git commit -a -m "Conflicting commit"  
[master a660160] Conflicting commit
 1 files changed, 1 insertions(+), 1 deletions(-)
KidA% git checkout topic
Switched to branch 'topic'
KidA% git merge master
Auto-merging test.file
CONFLICT (content): Merge conflict in test.file
Automatic merge failed; fix conflicts and then commit the result.
KidA% vim test.file

test.file before resolve:

<<<<<<< HEAD
bar
=======
foobar
>>>>>>> master

test.file after resolve:

foobar

KidA% git add test.file  
KidA% git commit -m "Merged master branch"
[topic 44c0cb6] Merged master branch
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...