Вопрос: Удалить фиксацию из филиала в Git


Я хотел бы знать, как удалить фиксацию.

От delete, Я имею в виду, что это не так, как будто я не сделал этого, и когда я сделаю толчок в будущем, мои изменения не будут продвигаться к удаленной ветке.

Я читаю git help, и я думаю, что мне следует использовать команду git reset --hard HEAD, Это верно?


2537


источник


Ответы:


Осторожный: git reset --hard УДАЛИТЬ ВАШИ ИЗМЕНЕНИЯ РАБОЧИХ СПРАВОЧНИКОВ , Будь уверен запишите любые локальные изменения, которые вы хотите сохранить перед выполнением этой команды.

Предполагая, что вы сидите на этом коммите, тогда эта команда развяжет его ...

git reset --hard HEAD~1

HEAD~1означает фиксацию перед головой.

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

git reset --hard <sha1-commit-id>

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

git push origin HEAD --force

Однако , если другие могут его потянуть, тогда вам лучше начать новую ветку. Потому что, когда они потянутся, он просто сольет его в свою работу, и вы его снова поднимете.

Если вы уже нажали, возможно, лучше использовать git revert, чтобы создать фиксацию «зеркального изображения», которая отменяет изменения. Однако оба фиксата будут в журнале.


FYI - git reset --hard HEADотлично, если вы хотите избавиться от РАБОТЫ В ПРОГРЕССЕ. Он вернет вас к последнему фиксации и удалит все изменения в рабочем дереве и индексе.


Наконец, если вам нужно найти фиксацию, которую вы «удалили», она обычно присутствует в git reflogесли у вас нет мусора, собирающего ваш репозиторий.


3260



Если вы еще не нажали коммит, вы можете использовать git rebase -iчтобы удалить эту фиксацию. Во-первых, узнайте, как далеко назад это фиксация (приблизительно). Затем выполните:

git rebase -i HEAD~N

~Nозначает переустановить последний Nсовершает ( Nдолжно быть число, например HEAD~10). Затем вы можете отредактировать файл, который Git представляет вам, чтобы удалить оскорбительную фиксацию. При сохранении этого файла Git затем перепишет все следующие коммиты, как если бы тот, который вы удалили, не существовал.

В Git Book есть хорошая раздел по переустановке с картинками и примерами.

Будьте осторожны с этим, потому что, если вы измените что-то, что вы иметь в другом месте, потребуется другой подход, если вы не планируете делать силовой толчок.


595



Другая возможность - одна из моих личных любимых команд:

git rebase -i <commit>~1

Это приведет к перезагрузке в интерактивном режиме -iв точке непосредственно перед фиксацией, которую вы хотите ударить. С тех пор редактор запустит список всех коммитов. Удалите строку, содержащую фиксацию, которую вы хотите уничтожить, и сохраните файл. Rebase выполнит оставшуюся часть работы, удалив только эту фиксацию и переведя все остальные обратно в журнал.


411



Я добавляю этот ответ, потому что не понимаю, почему любой, кто только что пытался выполнить работу, захочет удалить всю эту работу из-за ошибки с помощью Git!

Если вы хотите сохранить свою работу и просто «отменить» эту команду commit (вы поймали до нажатия на репо):

git reset --soft HEAD~1

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


278



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

$ git reset --hard HEAD^

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

Если вы уже опубликовали commit-to-be-commit, используйте git revert

$ git revert HEAD

46



Removing an entire commit

git rebase -p --onto SHA^ SHA

Obviously replace "SHA" with the reference you want to get rid of. The "^" in that command is literal.

http://sethrobertson.github.io/GitFixUm/fixup.html


40



git reset --hard commitId

git push <origin> <branch> --force

PS: CommitId refers the one which you want to revert back to


31



If you want to fix up your latest commit, you can undo the commit, and unstage the files in it, by doing:

git reset HEAD~1

This will return your repository to its state before the git add commands that staged the files. Your changes will be in your working directory. HEAD~1 refers to the commit below the current tip of the branch.

If you want to uncommit N commits, but keep the code changes in your working directory:

git reset HEAD~N

If you want to get rid of your latest commit, and do not want to keep the code changes, you can do a "hard" reset.

git reset --hard HEAD~1

Likewise, if you want to discard the last N commits, and do not want to keep the code changes:

git reset --hard HEAD~N

29