2016-10-14 68 views
0

我想弄清楚在進行更改時要在測試代碼版本之間來回切換的最簡單方法。當我處於某些事情的中間時,想要測試一下其他的東西,我會使用git stash,但是在這種情況下似乎是過度殺毒,因爲它無法在單個文件上完成。如何使用git臨時作爲臨時空間?

我試圖做的是git add {file}暫時存儲更改,然後git checkout {file}回到以前的狀態。其目的是將文件暫存作爲文件的暫存區域,然後將暫存的文件放回到我的工作目錄中。我很驚訝,雖然在升級文件後,結帳對工作目錄中的文件沒有影響。是否有一系列的命令選項可以讓我的工作流程按照我的要求運行?

更新1:

基於文檔看來,如果有一種方法步驟2不覆蓋該指數將工作

  1. 混帳添加{文件}
  2. git的結帳HEAD {文件}
  3. git的結帳{}文件

更新2:

在受到ElpieKay的帖子的啓發,看看寫文件命令的輸出後,我發現another answer克服了上述步驟2的限制。用git show HEAD:{file} > {file}我現在可以覆蓋文件的工作目錄版本而不覆蓋索引。然後調用checkout將索引版本拉入工作目錄。用git結帳指數我得到這個...結合

  1. 混帳添加{}文件
  2. 混帳顯示HEAD:{文件}> {}文件
  3. git的結帳指數-f
+0

可能重複的[從多個文件中只存儲一個文件,使用Git更改?](http://stackoverflow.com/questions/3040833/stash-only-one-file-out-of-multiple-files -that-have-changed-with-git) – dnit13

+0

@ dnit13感謝您指出帖子。我現在正在消化它,但首先看它看起來並沒有做我所需要的,並且可能非常容易出錯。 –

+0

會在分支上工作並通過父提交來回導航是否是一種選擇?您始終可以從另一個分支中挑選一個文件的副本。 –

回答

0

如果git stash不夠好,您可以簡單地使用git commit

首先讓我們製作一個標籤來跟蹤當前分支的尖端。

git tag start 

進行更改一些文件後,

git add . 
    git commit -m 'version 1' 
    git tag v1 
    #do the test 

進行一些其他更改,

git reset start --hard 
    git add . 
    git commit -m 'version 2' 
    git tag v2 

假如你有興趣在不同版本的file-a,使用git checkout v1 -- file-agit checkout v2 -- file-agit checkout start -- file-a在工作樹中切換file-a。最後,git tag -d start v1 v2刪除標籤。在此之前,如果需要,運行git reset start --hard。分支也可以工作,而不是標籤。

直接操作斑點是另一種方法。

#make some changes to file-a 
    #modify, modify, modify 
    #create the blob of this file-a and make a tag for it. 
    git tag v1 $(git hash-object -w file-a) 

    #restore file-a to HEAD's version 
    git checkout -- file-a 

    #make some other changes to file-a 
    #oh, oh, ah, ah 
    #create the blob of this file-a and make another tag for it. 
    git tag v2 $(git hash-object -w file-a) 

    #now we want version1's file-a 
    git cat-file -p v1 > file-a 

    #now we want version2's file-a 
    git cat-file -p v2 > file-a 

畢竟完成後,運行git tag -d v1 v2。至於臨時性斑點,如果你不再需要它們,就讓它們獨處,它們不會打擾你。

+0

我添加了一個更新,提到缺少拼圖的唯一部分似乎是在不覆蓋暫存區域的情況下結算到工作目錄的功能。我認爲cat-file命令可能會使這成爲可能。 –

+0

其實另一個問題的答案可能是'git show branch:file> exported_file' –

+1

@DanRoberts'git show '相當於'git cat-file -p '。它可以通過不同的命令完成。 – ElpieKay