удалить - отменить предыдущий коммит git




Как мне отменить последние коммиты в Git? (20)

Как исправить предыдущую локальную фиксацию

Используйте git-gui (или подобное) для выполнения git commit --amend . Из графического интерфейса вы можете добавлять или удалять отдельные файлы из фиксации. Вы также можете изменить сообщение фиксации.

Как отменить предыдущую локальную фиксацию

Просто верните ветку в предыдущее место (например, используя gitk или git rebase ). Затем повторите внесение изменений из сохраненной копии. После сбора мусора в вашем локальном репозитории, это будет похоже на то, что нежелательная фиксация никогда не происходила. Чтобы сделать все это в одной команде, используйте git reset HEAD~1 .

Слово предупреждения : Небрежное использование git reset - хороший способ заставить вашу рабочую копию запутать состояние. Я рекомендую, чтобы новички Git избегали этого, если могли.

Как отменить публичную фиксацию

Выполните обратную вишню ( git-revert ), чтобы отменить изменения.

Если вы еще не ввели другие изменения в свою ветку, вы можете просто сделать ...

git revert --no-edit HEAD

Затем нажмите обновленную ветку в общий репозиторий.

В истории фиксации будут отображаться обе фиксации отдельно .

Дополнительно: Исправление частной ветви в общедоступном хранилище

Это может быть опасно - убедитесь, что у вас есть локальная копия ветки, чтобы отменить.

Также обратите внимание: вы не хотите этого делать, если кто-то другой может работать в филиале.

git push --delete (branch_name) ## remove public version of branch

Очистите свою ветку локально, затем отпустите ...

git push origin (branch_name)

В нормальном случае вам, вероятно, не нужно беспокоиться о том, что история фиксации частного филиала является нетронутой. Просто нажмите фиксацию последующего действия (см. «Как отменить публичный коммит» выше), а затем выполните squash-merge чтобы скрыть историю.

Я случайно передал неправильные файлы Git , но я еще не нажал фиксацию на сервер.

Как я могу отменить эти коммиты из локального репозитория?


Отменить последнее коммит:

git reset --soft HEAD^ или git reset --soft HEAD~

Это приведет к отмене последнего фиксации.

Здесь --soft означает сброс настроек.

HEAD~ или HEAD^ означает переход к фиксации перед HEAD.

Заменить последнюю фиксацию на новую фиксацию:

git commit --amend -m "message"

Он заменит последнее коммит новым фиксатором.


Отменить фиксацию и повторить

$ git commit -m "Something terribly misguided"             # (1)
$ git reset HEAD~                                          # (2)
<< edit files as necessary >>                              # (3)
$ git add ...                                              # (4)
$ git commit -c ORIG_HEAD                                  # (5)
  1. Это то, что вы хотите отменить
  2. Это оставляет рабочее дерево (состояние ваших файлов на диске) неизменным, но отменяет фиксацию и оставляет внесенные вами изменения недействительными (поэтому они будут отображаться как «Изменения не поставлены для фиксации» в git status , и вам нужно будет добавьте их еще до совершения). Если вы хотите добавить больше изменений в предыдущую фиксацию или изменить сообщение фиксации 1 , вместо этого вы можете использовать git reset --soft HEAD~ , который похож на git reset HEAD~ (где HEAD~ совпадает с HEAD~1 ), но оставляет ваши существующие изменения.
  3. Внести исправления в файлы рабочих деревьев.
  4. git add все, что вы хотите включить в новый коммит.
  5. Зафиксируйте изменения, повторно используя старое сообщение фиксации. reset скопировал старую голову в .git/ORIG_HEAD ; commit с -c ORIG_HEAD откроет редактор, который изначально содержит сообщение журнала из старого фиксации и позволяет вам его редактировать. Если вам не нужно редактировать сообщение, вы можете использовать опцию -C .

Однако commit --amend что если вы добавили какие-либо новые изменения в индекс, использование commit --amend добавит их к вашему предыдущему фиксации.

Если код уже перенесен на ваш сервер, и у вас есть права на перезапись истории (rebase), тогда:

git push origin master --force

Вы также можете посмотреть на этот ответ:

Как переместить HEAD обратно в предыдущее место? (Отдельная головка)

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

1 Обратите внимание, однако, что вам не нужно выполнять сброс до более раннего фиксации, если вы только что допустили ошибку в своем сообщении о фиксации . Более простым вариантом является git reset (чтобы просмотреть все изменения, которые вы сделали с тех пор), а затем git commit --amend , который откроет ваш редактор сообщений по умолчанию, предварительно заполненный последним сообщением фиксации.


«Сбросить рабочее дерево до последнего фиксации»

git reset --hard HEAD^ 

«Очистить неизвестные файлы от рабочего дерева»

git clean    

см. - Краткая ссылка Git

ПРИМЕЧАНИЕ. Эта команда удалит предыдущую фиксацию, поэтому используйте ее с осторожностью! git reset --hard безопаснее -


В моем случае я случайно совершил некоторые файлы, которые я не хотел. Поэтому я сделал следующее, и это сработало:

git reset --soft HEAD^
git rm --cached [files you do not need]
git add [files you need]
git commit -c ORIG_HEAD

Проверьте результаты с помощью gitk или git log -stat


Введите git log и найдите последний код хеширования и введите:

git reset <the previous co>

Единая команда:

git reset --soft 'HEAD^' 

Он отлично работает, чтобы отменить последнюю локальную фиксацию!


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

git reset --hard HEAD^1

(Эта команда будет игнорировать всю вашу фиксацию, и ваши изменения будут полностью потеряны из вашего локального рабочего дерева). Если вы хотите отменить фиксацию, но хотите внести изменения в промежуточную область (перед фиксацией точно так же, как после git add ), выполните следующую команду.

git reset --soft HEAD^1

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

git reset HEAD

Теперь переданные файлы поступают из поэтапной области в непоставленную область. Теперь файлы готовы к редактированию, поэтому, что бы вы ни изменили, вы хотите перейти к редактированию и добавить его и создать новый / новый коммит.

More


Если вы хотите окончательно отменить его, и вы клонировали некоторый репозиторий

Идентификатор фиксации можно увидеть

git log 

Тогда вы можете сделать -

git reset --hard <commit_id>

git push origin <branch_name> -f

Если вы хотите удалить файлы в последнем коммите, вы можете использовать это:

git reset --hard HEAD~1

И если нужны файлы в последнем коммите, вы можете использовать это:

git reset --soft HEAD~1

Есть много способов сделать это:

Команда Git для отмены последнего фиксации / предыдущих коммитов:

Предупреждение: Не используйте --hard, если вы не знаете, что делаете. --hard слишком опасен , и он может удалить ваши файлы.

Основная команда для отмены фиксации в Git:

$ git reset --hard <COMMIT -ID>

или же

$ git reset --hard HEAD~<n>

COMMIT-ID : идентификатор для фиксации

n: число последних коммитов, которые вы хотите вернуть

Вы можете получить идентификатор фиксации, как показано ниже:

$ **git log --oneline**

d81d3f1 function to subtract two numbers

be20eb8 function to add two numbers

bedgfgg function to mulitply two numbers

где d81d3f1 и be20eb8 - идентификатор commit.

Теперь давайте посмотрим на некоторые случаи:

Предположим, вы хотите вернуть последнее коммит 'd81d3f1'. Вот два варианта:

$ git reset --hard d81d3f1

или же

$ git reset --hard HEAD~1

Предположим, вы хотите вернуть commit 'be20eb8':

$ git reset --hard be20eb8

Для получения более подробной информации вы можете обратиться и попробовать другие команды для сброса головы в указанное состояние:

$ git reset --help

Использовать git revert commit-id

Чтобы получить идентификатор фиксации, просто используйте git log


Используйте reflog, чтобы найти правильное состояние

git reflog

REFLOG ПЕРЕД СБРОСОМ

Выберите правильный рефлог (f3cb6e2 в моем случае) и введите

git reset --hard f3cb6e2

После этого HEAD возвращается к HEADid LOG ПОСЛЕ СБРОСА

Наконец, reflog выглядит как картинка ниже

REFLOG FINAL


Мне потребовалось некоторое время, чтобы понять, так что, возможно, это поможет кому-то ...

Существует два способа «отменить» ваш последний коммит, в зависимости от того, сделал ли вы общедоступный отчет (нажал на удаленный репозиторий):

Как отменить локальную фиксацию

Предположим, что я сделал локально, но теперь хочу удалить эту фиксацию.

git log
    commit 101: bad commit    # latest commit, this would be called 'HEAD'
    commit 100: good commit   # second to last commit, this is the one we want

Чтобы восстановить все до того, как это было до последнего фиксации, нам нужно выполнить reset до фиксации перед HEAD :

git reset --soft HEAD^     # use --soft if you want to keep your changes
git reset --hard HEAD^     # use --hard if you don't care about keeping the changes you made

Теперь git log покажет, что наша последняя фиксация была удалена.

Как отменить публичную фиксацию

Если вы уже сделали свои коммиты общедоступными, вам нужно будет создать новый коммит, который «вернет» изменения, внесенные вами в предыдущую фиксацию (текущий HEAD).

git revert HEAD

Теперь ваши изменения будут отменены и готовы к фиксации:

git commit -m 'restoring the file I removed by accident'
git log
    commit 102: restoring the file I removed by accident
    commit 101: removing a file we don't need
    commit 100: adding a file that we need

Для получения дополнительной информации, ознакомьтесь с Основами Git - Отменить вещи


Первый забег:

git reflog

Он покажет вам все возможные действия, которые вы выполнили в своем репозитории, например, commit, merge, pull и т. Д.

Затем выполните:

git reset --hard ActionIdFromRefLog

По-другому:

Оформите заявку на филиал, который хотите вернуть, затем верните локальную рабочую копию обратно на коммит, который вы хотите быть последним на удаленном сервере (все после того, как оно пройдет до свидания). Для этого в SourceTree я щелкнул правой кнопкой мыши и выбрал «Сбросить BRANCHNAME на это коммит».

Затем перейдите в локальный каталог вашего репозитория и выполните следующую команду:

git -c diff.mnemonicprefix=false -c core.quotepath=false push -v -f --tags REPOSITORY_NAME BRANCHNAME:BRANCHNAME

Это приведет к удалению всех коммитов после текущего в локальном репозитории, но только для одной ветви.


Простой, запустите это в командной строке:

git reset --soft HEAD~ 

Существует два основных сценария

Вы еще не нажали фиксацию

Если проблема связана с дополнительными файлами, которые вы совершили (и вы не хотите их использовать в репозитории), вы можете удалить их с помощью git rm а затем --amend с помощью --amend

git rm <pathToFile>

Вы также можете удалить целые каталоги с помощью -r или даже объединить с другими командами Bash

git rm -r <pathToDirectory>
git rm $(find -name '*.class')

После удаления файлов вы можете совершить, с параметром --amend

git commit --amend -C HEAD # the -C option is to use the same commit message

Это позволит переписать недавний локальный коммит, удалив лишние файлы, поэтому эти файлы никогда не будут отправляться на push, а также будут удалены из вашего локального репозитория .git через GC.

Вы уже нажали на фиксацию

Вы можете применить одно и то же решение другого сценария, а затем выполнить git push с параметром -f , но это не рекомендуется, поскольку он перезаписывает удаленную историю с различными изменениями (это может испортить ваш репозиторий).

Вместо этого вы должны выполнить фиксацию без --amend (помните об этом -amend`: этот параметр перезаписывает историю в последнем коммите).


Я хотел отменить последние 5 коммитов в нашем общем хранилище. Я просмотрел идентификатор ревизии, к которому я хотел откат. Затем я набрал следующее.

prompt> git reset --hard 5a7404742c85
HEAD is now at 5a74047 Added one more page to catalogue
prompt> git push origin master --force
Total 0 (delta 0), reused 0 (delta 0)
remote: bb/acl: neoneye is allowed. accepted payload.
To [email protected]:thecompany/prometheus.git
 + 09a6480...5a74047 master -> master (forced update)
prompt>

Как отменить последний Git?

Чтобы восстановить все до того, как это было до последнего фиксации, нам нужно сбросить фиксацию до HEAD.

  1. Если вы не хотите сохранять свои изменения, которые вы сделали:

    git reset --hard HEAD^
    
  2. Если вы хотите сохранить свои изменения:

    git reset --soft HEAD^
    

Теперь проверьте свой журнал git. Он покажет, что наша последняя фиксация была удалена.







git-revert