2016-08-08 2 views
1

Я довольно новичок в git и пришел из mercurial. Я сделал что-то не так и подтолкнул его, но некоторые товарищи по команде уже смогли вытащить эти неправильные изменения. Таким образом, reset --hard; push -f - это не вариант. Можно ли сообщить git, что я хочу зафиксировать изменения, чтобы это стало, это было 2 месяца назад? Я имею в виду что-то вроде этого:Можно ли вернуться к какой-либо фиксации без сброса - hard?

master:

commit 4 <<--- Remote/local master's head 
^
    | 
    | 
commit 3 
^
    | 
    | 
commit 2 <<-- I want git to craft changes so that commit 5 
^   is the same as commit 2 
    | 
    | 
    | 
commit 1 

Я хочу мерзавец, чтобы произвести изменения, так что commit 5 изменяет файлы так, чтобы они стали такими же, как они были в commit 2.

Это можно сделать?

ответ

3

Вы можете revert фиксации с помощью GIT Revert:

git revert commit3 commit4 

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

История будет по-прежнему быстрой вперед, на вашем пути, чтобы нажать ее без -f.

+0

Но разве можно избежать указания всех коммитов? Я имею в виду, может быть, есть способ сказать git, что я хочу вернуть все коммиты из 'commit x' в' commit y'? – user3663882

+0

Нет, я не знаю, насколько это возможно. Использование 'commit3 ... commit4' слишком опасно, и git предотвращает его по умолчанию. – blue112

+0

Получил. Итак, если мы сделали что-то не так, нам придется отменить фиксацию вручную. Спасибо. – user3663882

1

Нет проблем с принудительным нажатием для ваших товарищей по команде, им просто нужно сбросить репозиторий до последнего известного хорошего фиксажа до вытягивания (git reset --hard sha1-of-old-good-commit), а затем снова потянуть изменения. Более того, если вы перешли в свою «частную» рабочую ветвь, они вообще не должны заботиться об этом филиале, проблема только с master или другим филиалом, в который вы объедините всю свою работу.

Итак, чтобы свести к минимуму проблемы с историей переписывать (это хорошая функция git, и хорошо использовать ее, и не нужно отрицать это!) - всегда передавать частную ветку: вы будете в безопасности, чтобы rebase/squash/edit коммиты в этой ветке перед слиянием с " мастер ".