2012-03-21 4 views
27

У меня была ошибка и внесены некоторые изменения в git, которые я не должен был совершать. После того, как я совершил коммит, я подтолкнул изменения. Затем я использовал следующие команды, чтобы попытаться сбросить изменения.Невозможно нажать изменения после использования git reset --hard

git reset --hard head 

Теперь я хочу, чтобы подтолкнуть этот «сброс» на удаленный репозиторий с помощью этой команды:

git push MyBranch 

Но я получаю эту ошибку:

remote: error: denying non-fast-forward refs/heads/branch (you should pull first) 

Я пытался использовать этот без каких-либо успехов:

git push -f "origin" 

Любая идея, что я могу сделать?

ответ

53
git push -f origin myBranch 

должны работать (при условии, вы знаете, это может быть опасно, если MyBranch уже принес другим в их собственном репо)

Примечание: если ваш удаленный репо ('происхождение') имеет свой набор config с

receive.denyNonFastForwards true 

, он откажется от любого неуправляемого нажатия (даже при принудительной).
См. "Is there a way to configure git repository to reject 'git push --force'?".


В OP user654019 отчеты

I managed to solve the problem this time by setting denyNonFastForwards to false and using -f to force the push

Если ОП не имеют доступа к репо, он/она должен:

  • сброса локального ГОЛОВУ в исходное положение (см. «Recover from git reset --hard?»):
    git reset [email protected]{1}
  • сделать новый совершить которые отменить слияние, как описано в ProGit book с git revert:
    git revert -m 1 HEAD~ (в вашем случае)

К примеру:

$ git revert -m 1 [sha_of_C8] 
Finished one revert. 
[master 88edd6d] Revert "Merge branch 'jk/post-checkout'" 
1 files changed, 0 insertions(+), 2 deletions(-) 

revert a merge

Полное обсуждение о том, как вернуть слияние, может be found here.

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

+0

Это не сработало. Возможно, конфигурация установлена ​​в репозитории. Два вопроса: Каков наилучший способ решить эту проблему, если denyNonFastForwards верен? Как я могу вернуть некоторые mchanges (слияние) и создать новую фиксацию? – mans

+0

@ user654019: создав новый коммит, состоящий из изменений, отменяющих ваш предыдущий коммит: используйте [git revert] (http://linux.die.net/man/1/git-revert): вы сможете новое совершение в качестве быстрого перехода вперед. – VonC

+0

Исходный коммит был слиянием, и когда я попытался сделать revert -m 1 , я получил некоторую ошибку – mans

3

Вы должны указать, что реф вы хотите нажать:

git push -f origin MyBranch