2016-02-04 2 views
1

У меня есть следующий журнал Git. Я хочу вернуться к 2c2996639ec10d659a771c4398759deb323eb08c, который является одним до мастера ветки. Однако я хочу сохранить историю последнего фиксации в репозитории. Наконец, я не хочу создавать вилку, но просто хочу одну ветку.Возврат к предыдущему GIT-фиксации без форкирования

Так что я предполагаю, что я мог бы сделать что-то вроде:

git checkout 2c2996639ec10d659a771c4398759deb323eb08c 

Но если я так, что произойдет, когда я потом толкать его в хранилище?

[[email protected] testing]$ git status 
# On branch master 
# Your branch is ahead of 'origin/master' by 43 commits. 
# 
nothing to commit (working directory clean) 
[[email protected] testing]$ git log 
commit 0fb5d27e1bc57b120e0f361f8f71a947bb264448 
Author: Michael Smith <[email protected]> 
Date: Thu Feb 4 05:20:31 2016 -0800 

    changed to using account to links 

commit 2c2996639ec10d659a771c4398759deb323eb08c 
Author: Michael Smith <[email protected]> 
Date: Mon Feb 1 07:48:20 2016 -0800 

    Finished implementation of new projects 

...... 
...... 

commit 0ad8e4a14f01ccb964b945afaafe98f14f478f98 
Author: Michael Smith <[email protected]> 
Date: Wed Apr 23 06:21:04 2014 -0700 

    Changed link locations to reflect changing /lib/plugins to /lib/plugins_3rd and /lib/plugins_my to /lib/plugins 

commit dde33715730c58f100c180d6871251baef0d25ea 
Author: Michael Smith <[email protected]> 
Date: Mon Apr 21 00:55:52 2014 -0700 

    Initial commit 
[[email protected] testing]$ git log 
+0

@ raina77ow Я думал, может быть, 'git revert HEAD ~ 1'. Никогда раньше не возвращался раньше, но думал, возможно, это создаст новую фиксацию, которая вернется к предыдущему состоянию. Это означало бы, что у меня было бы две коммиты с идентичным контентом и '0fb5d27e1bc57b120e0f361f8f71a947bb264448' между ними. Полагаю, это было бы хорошо, пока это работает. – user1032531

+0

Возможный дубликат [Как отменить последний коммит?] (Http://stackoverflow.com/questions/927358/how-do-you-undo-the-last-commit) – LeGEC

+0

К сожалению, я не видел ваших комментарий, прежде чем я ответил. Да, так оно и работает, но вы хотите «вернуть HEAD» не 'HEAD ~ 1'. С помощью 'revert' вы указываете фиксацию для отмены. – N3dst4

ответ

1

git revert HEAD в то время как у вас есть самая последняя совершить Выдана создаст новый коммит поверх текущей ГОЛОВЕ, который отменяет изменения в нем. Это оставит код в том же состоянии, что и до этого, но со всей вашей историей в такт.

o (HEAD) Revert - gets back to state A 
| 
o Commit that we want to preserve but undo 
| 
o Last good commit, call it state A 
| 
| (previous history) 
+0

Спасибо N3dst4. Почему git возвращает HEAD', а не 'git revert HEAD ~ 1'? Посмотрите на https://git-scm.com/docs/git-revert и попытайтесь выяснить, как это работает. – user1032531

+0

Ха-ха, в этом разговоре есть условие гонки. С 'revert' вы указываете фиксацию для отмены, а не фиксацию, к которой хотите вернуться. – N3dst4

+0

Ха-ха, да! Итак, я возвращаю фиксацию «HEAD», которая возвращается ко второму (что я хочу!)? Но если бы я хотел перейти к третьему, то я бы использовал 'git revert HEAD ~ 1'? – user1032531

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