Как я могу удалить свой последний коммит в моем локальном git-репозитории - PullRequest
30 голосов
/ 12 апреля 2010

Когда я выполняю 'git pull', у меня возникает конфликт с коммитом головы. Поэтому я сделал 'git rebase --abort'

Могу ли я «сохранить» свой коммит в «патче», а затем выполнить git pull?

То, что я хочу подражать, это:

  • Я не совершал коммит, но вместо этого я сделал «git stash»
  • Сделайте git pull, чтобы избежать ошибки слияния

Так что мне нужно как-то «повернуть время вспять». Это возможно с git?

Ответы [ 4 ]

68 голосов
/ 12 апреля 2010

Ваш патч 7826b2 по-прежнему вызовет конфликт, когда он будет применен после вытягивания, но вы можете сделать следующее:

git reset --soft HEAD^
git stash
git pull
git stash pop # Will cause a conflict
git commit    # Re-commit 7826b2

Возможен и другой рабочий процесс:

git reset --hard HEAD^
git pull
git cherry-pick 7826b2 # Will cause a conflict

Второй рабочий процесс основан на том факте, что Git сохраняет коммит 7826b2 в reflog (вы можете рассматривать его как корзину), даже если вы сбрасываете изменения, внесенные в первой строке.

6 голосов
/ 14 апреля 2010

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

git fetch origin

git rebase origin / master

Это отменяет ваши локальные коммиты от локального мастера, применяет новые коммиты от origin / master, а затем воспроизводит ваши локальные коммиты.

В вашей ситуации это приведет к конфликту, и git сообщит вам, какие файлы необходимо отредактировать для разрешения конфликта. После этого git add эти файлы, а затем git commit без аргументов для повторного внесения изменений.

3 голосов
/ 12 января 2016

Сначала я предлагаю сделать резервную копию вашей ветки:

git branch your_branch_backup

Тогда самый простой способ:

git reset --soft <commit> #Go back in time but without loosing your changes
git stash                 #Stash your changes
git pull                  #Refresh your branch with origin
git stash pop             #Re-apply your changes on the refreshed branch 

Тогда вы можете совершить как обычно

0 голосов
/ 12 апреля 2010

Существует способ, фактически в git, я уверен, что есть множество способов сделать это ...

Вы можете сделать:

git stash     # Stash your changes
git pull      # Pull the changes
git stash pop # Pop your stash

Вы можете сделать:

git pull --rebase # Bring in the changes and apply yours on top of it.

Вы можете сделать:

git stash     # Stash your changes
git checkout <commit> # Pull a specific commit.
git stash pop # Pop your stash

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...