3-具體學習git--reset回到過去的版本(commit間穿梭),checkout單個文件穿梭


git log --oneline 命令可以在一塊兒顯示做過的改動。

我在change 2時忘了一條,想在change 1后再添加一個語句或一個操作,然后這個狀態再提交仍作為change 2.將這個staged改動作為上一個commit中。

將1.py復制了一份重命名為2.py,然后git add 2.py,我如果直接用git commit -m “備注”就不行,可以用 git commit --amend --no-edit

雖然change 2的注釋沒變,但是前面的指針地址變了,可以看出來。

 


 

 從staged狀態返回到modified狀態:git reset 1.py

--

-----------------------------

 另一種情況是我改變代碼文檔后add 到了staged狀態,也commit成unmodified狀態了,那我怎樣返回到add前改變代碼的狀態呢?用指針移動啊。

首先看看有幾個版本,git log --oneline,發現有三個:

可以用 git reset --hard HEAD來重新回到add之前,這個HEAD就代表了07e8eb5這個指針,回到了初始的commit狀態,

然后查看狀態:

發現沒有任何回應,說明是commit狀態(即commit后的unmodified狀態)

如果我想回到上一個commit狀態,我用 git reset  --hard HEAD^  或git reset --hard HEAD~1 或用git reset --hard 7efe439 ,最后一個是id號碼。

如果我現在想回到未來,但是看不到change 2 的id號了,怎么辦呢?用 git reflog命令找到所有的id號,然后通過id號回到以前有過的將來。

也可以把指針復制過來,

 

 


 

 

單個文件回到從前:

git checkout 7efe439 -- 1.py                       7efe439是id號,1.py是要操作的文檔。

 

 

發現1.py內容變了。

但是2.py還是之前的內容。

checkout還可以在branch分支之間切換。

我現在修改1.py:

執行:

 

這時發現1.py的change 2還存在,並沒有被覆蓋,我們仍然可以回到那個過去。不過現在仍處在:

-----------------------------------------------------

reset和checkout的區別:

1.reset是整個目錄回到從前的commit,創造另外一個未來,checkout是單個文件回到從前的commit,回到以前的未來。

2.reset回到從前某個時間點,這個時間點將來直到現在時間的變化不會顯示在log 中,而checkout仍然顯示在log中。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM