Git 工具之重置解密 7 7

2021-09-13 04:14:06 字數 2057 閱讀 7998

工作流程

參考資料

目錄在繼續了解更專業的工具前,我們先討論一下 reset 與 checkout。 在你初次遇到的 git 命令中,這兩個是最讓人困惑的。 它們能做很多事情,所以看起來我們很難真正地理解並恰當地運用它們。 針對這一點,我們先來做乙個簡單的比喻。

理解 reset 和 checkout 的最簡方法,就是以 git 的思維框架(將其作為內容管理器)來管理三棵不同的樹。 「樹」 在我們這裡的實際意思是 「檔案的集合」,而不是指特定的資料結構。 (在某些情況下索引看起來並不像一棵樹,不過我們現在的目的是用簡單的方式思考它。)

git 作為乙個系統,是以它的一般操作來管理並操縱這三棵樹的:

樹 用途

index 預期的下一次提交的快照

working directory 沙盒

其實,檢視快照的樣子很容易。 下例就顯示了 head 快照實際的目錄列表,以及其中每個檔案的 sha-1 校驗和:

$ git cat-file -p head

tree cfda3bf379e4f8dba8717dee55aab78aef7f4daf

author scott chacon 1301511835 -0700

committer scott chacon 1301511835 -0700

initial commit

$ git ls-tree -r head

100644 blob a906cb2a4a904a152... readme

100644 blob 8f94139338f9404f2... rakefile

040000 tree 99f1a6d12cb4b6f19... lib

cat-file 與 ls-tree 是底層命令,它們一般用於底層工作,在日常工作中並不使用。不過它們能幫助我們了解到底發生了什麼。

索引是你的預期的下一次提交。

我們也會將這個概念引用為 git 的 「暫存區域」,這就是當你執行 git commit 時 git 看起來的樣子。

git 將上一次檢出到工作目錄中的所有檔案填充到索引區,它們看起來就像最初被檢出時的樣子。 之後你會將其中一些檔案替換為新版本,接著通過 git commit 將它們轉換為樹來用作新的提交。

$ git ls-files -s

100644 a906cb2a4a904a152e80877d4088654daad0c859 0 readme

100644 8f94139338f9404f26296befa88755fc2598c289 0 rakefile

100644 47c6340d6459e05787f644c2447d2595f5d3a54b 0 lib/******git.rb

再說一次,我們在這裡又用到了 ls-files 這個幕後的命令,它會顯示出索引當前的樣子。

確切來說,索引並非技術上的樹結構,它其實是以扁平的清單實現的。不過對我們而言,把它當做樹就夠了。

最後,你就有了自己的工作目錄。 另外兩棵樹以一種高效但並不直觀的方式,將它們的內容儲存在 .git 資料夾中。

工作目錄會將它們解包為實際的檔案以便編輯。 你可以把工作目錄當做 沙盒。在你將修改提交到暫存區並記錄到歷史之前,可以隨意更改。

$ tree

.├── readme

├── rakefile

└── lib

└── ******git.rb

1 directory, 3 files

git 主要的目的是通過操縱這三棵樹來以更加連續的狀態記錄專案的快照。

讓我們來視覺化這個過程:假設我們進入到乙個新目錄,其中有乙個檔案。 我們稱其為該檔案的 v1 版本,將它標記為藍色。 現在執行 git init,這會建立乙個 git 倉庫,其中的 head 引用指向未建立的分支(master 還不存在)。

ps: 過程省略。

工具-重置揭密

00-目錄

Git學習之Git 重置

分支游標master 引用 refs heads master 在有新的提交發生的時候,指向新的提交。1 將master游標重置到舊的提交上 注意 使用了 hard 引數,會破壞工作區未提交的改動 git reset hard head 2 重置命令不僅可以重置到前一次提交,而且還可以使用提交id重...

工具之git補丁操作

情況說明 當你有兩個相同的repo repo1和repo2,並且你在repo1中對 進行了修改,現在想把repo1的修改新增到repo2中,但總不會乙個乙個手動修改吧,git就提供了打補丁的工具,將改進的部分進行增刪。操作如下 1.先在repo1中checkout到修改後的branch,再修改提交c...

專案管理工具之Git

git安裝 雙擊一路下來,根據個人喜好,修改安裝路徑 設定git的user name和email git config global user.name test git config global user.email test bldz.com 生成ssh金鑰過程 1.檢視是否已經有了ssh金鑰...