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中。