2010-04-11 2 views
23

Когда я делаю «git pull», у меня конфликт с фиксацией головы. Итак, я сделал «git rebase -abort»Как удалить последний коммит в моем локальном репозитории git

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

То, что я хочу, чтобы эмулировать это:

  • я не совершал, но я сделал «GIT притон» вместо
  • сделать GIT напряжение, чтобы избежать каких-либо Merge ошибку

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

ответ

56

Ваш 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 в рефлоге (вы можете считать его корзиной), даже если вы сбросите изменения, внесенные в первую строку.

0

Существует способ, на самом деле в мерзавец, я уверен, что есть множество способов сделать это ...

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

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 

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

4

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

мерзавец выборки происхождения

мерзавец перебазироваться происхождения/мастер

Это раскручивает ваш местный совершает локальный мастер, применяет новые коммиты от источника/мастера, а затем повторяет ваши локальные коммиты.

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

+0

это то, что я искал для, большой. –

0

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

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 

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

Смежные вопросы