2015-07-18 5 views
1

Я довольно новичок в использовании revert в git, и мне интересно, можно ли сделать что-то вроде следующего. Скажем, я сделал несколько фиксаций уже, и у меня есть (сам-explanitory) текстовый файл, который выглядит следующим образом:Git: Отменить старый фиксатор на одном файле

This line was added at commit AAAAA 
This line was added at commit BBBBB 
This line was added at commit CCCCC 

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

This line was added at commit AAAAA 
This line was added at commit CCCCC 

Однако, возвращаясь фиксации результатов BBBBB в слиянии конфликта. Есть ли способ избежать конфликта?

+0

Вы попробовали это -> http://stackoverflow.com/questions/2318777/undo-a-particular-commit-in-git? – unrealsoul007

+1

@ unrealsoul007, который просто говорит использовать 'git revert' – melpomene

+0

@ unrealsoul007 Да. Я могу вернуть фиксацию, но она всегда приводит к конфликтам. Я могу разрешить конфликты вручную или с помощью инструмента, но это довольно неудобно (особенно для больших файлов). Если это можно сделать автоматически, это будет очень полезно для меня. – GJStein

ответ

1

Однако, возвращаясь фиксацией результатов BBBBB в совмещенном конфликте. Есть ли способ избежать конфликта?

Чтобы точно узнать, что вызывает конфликт, сделать

git checkout --merge --conflict=diff3 -- path/to/file 

который покажет вам оригинальный и оба изменили версии текста Git и не желает automerge.

Что сводится к тому, есть мерзавец слияние изменений от вернулось обязательство своего родителя с изменением от вернулся совершить до текущей версии:

bbbbb verson -> aaaaa version, 

и

bbbbb version -> cccccc version (+ whatever else) 

и смена ханков перекрывается, поэтому git не собирается авторизоваться.

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

0

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

git checkout HEAD~1 directory/path/file.txt 
git add directory/path/file.txt 
git commit -m "directory/path/file.txt reverted" 

В основном git checkout HEAD . сброс всех файлы из рабочего каталога или только указанные каталоги или только отдельные файлы, в указанное состояние данного коммита.

Кроме того, если вы хотите вернуть один каталог в состояние 3 фиксаций назад, вы можете:

git checkout HEAD~3 some/directory/ 

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

  • Нет связанных вопросов^_^