2010-08-24 163 views
203

我最近從SVN轉移到Git,並且對某事有些困惑。我需要通過調試器運行以前版本的腳本,所以我做了git checkout <previous version hash>並做了我需要做的事情。如何回到Git的最新版本?

現在我想回到最新版本,但我不知道它的散列。當我輸入git log時,我沒有看到它。

我該怎麼做?另外,是否有更簡單的方法來改變版本,比輸入哈希值 - 例如「回到兩個版本」或「按照時間順序排列最近」?

回答

247

git checkout master應該做的伎倆。回去兩個版本,你可以這樣說:git checkout HEAD~2,但最好創建基於在那個時候臨時黨支部,所以git checkout -b temp_branch HEAD~2

+4

酷! 'git checkout master'正是我如何從分支切換回來的。那麼這是否意味着當我查看以前的版本時,我基本上創建了一個分支? – 2010-08-24 17:19:19

+3

@Nathan:在git中,一個分支實際上大多是一個指向特定修訂版的可移動指針。所以從概念上講,你有點創建一個分支,但不是git想到分支的意思。 – DLH 2010-08-24 17:26:17

+2

因此,在最簡單的情況下,我得到了一堆線性變化,當我檢出一個較早版本時,我將HEAD指針移到那裏,這意味着'git log'會相對於那個點顯示?當我結帳主,我將指針移動到最新版本的主分支? – 2010-08-24 17:30:33

4

您可以檢查出使用分支名稱,一兩件事。

我知道有幾種方法可以移動HEAD,但我會把它留給git專家來列舉它們。

我只是想建議gitk --all - 我發現它非常有用的時候開始與git。

+3

+1問題。 ** SO **有用。 – DLH 2010-08-24 17:23:31

6

我剛開始深入挖掘git的,所以不知道如果我理解正確的,但我認爲正確的答案OP的問題是,你可以運行git log --all用這樣的格式規範:git log --all --pretty=format:'%h: %s %d'。這標記當前檢出版本爲(HEAD),您可以從列表中抓取下一個版本。

順便說一句,像這樣的別名添加到您的.gitconfig一個稍微好一點的格式,你可以運行git hist --all

hist = log --pretty=format:\"%h %ai | %s%d [%an]\" --graph 

關於相關版本,我發現這個post,但它只是早期版本的會談,可能沒有什麼可以提及新版本。

22

這奏效了,我(我仍然在主分支):

git reset --hard origin/master

+23

**重置--hard **是一種矯枉過正的行爲,表明您並不知道您所做的修改。這可能導致它丟失代碼。 – Thomio 2016-03-08 13:38:02

+0

在我的情況下,我想擺脫unpushed意外承諾的變化。我知道還有其他方法可以實現這一點。我同意,如果你不想放鬆你未經承諾的改變,這是數據丟失。 – 2017-08-31 23:57:30

29

當你檢出到一個特定的提交,Git會創建一個分支分離。所以,如果你撥打:

$ git branch 

你會看到類似這樣的:

* (detached from 3i4j25) 
    master 
    other_branch 

回來主分支頭,你只需要再次檢出到你的主分支:

$ git checkout master 

該命令將自動刪除分離的分支。

如果git checkout不起作用,您可能修改了分支之間衝突的文件。爲了防止你丟失代碼,git需要你處理這些文件。你有三個選擇:

  1. 藏匿您的修改(以後可以彈出他們):

    $ git stash 
    
  2. 放棄更改復位-ING分離的分支:

    $ git reset --hard 
    
  3. 創建與之前的修改並承諾它們的新分支:

    $ git checkout -b my_new_branch 
    $ git add my_file.ext 
    $ git commit -m "My cool msg" 
    

在此之後,你可以回到你的主分支(最新版本):

$ git checkout master 
0

更優雅和簡單的解決方案是使用

git stash 

它將返回最受歡迎的分支本地版本,並保存您的更改隱藏,所以如果您想撤消此操作,請執行以下操作:

git stash apply 
2

當你回到以前的版本,

$ git checkout HEAD~2 
Previous HEAD position was 363a8d7... Fixed a bug #32 

你可以用這個命令,即使在這種情況下,看到你的特徵日誌(散);

$ git log master --oneline -5 
4b5f9c2 Fixed a bug #34 
9820632 Fixed a bug #33 
... 

master可以用另一個分支名稱替換。

然後檢查它,你將能夠回到該功能。

$ git checkout 4b5f9c2 
HEAD is now at 4b5f9c2... Fixed a bug #34 
1

要返回到最新版本:

git checkout <branch-name> 

例如,git checkout mastergit checkout dev