Git是一個開源的分佈式版本控制系統,用於敏捷高效地處理任何或小或大的項目。git
Git 工做流程
- 克隆 Git 資源做爲工做目錄。
- 在克隆的資源上添加或修改文件。
- 若是其餘人修改了,你能夠更新資源。
- 在提交前查看修改。
- 提交修改。
- 在修改完成後,若是發現錯誤,能夠撤回提交併再次修改並提交。
Git 工做區、暫存區和版本庫
- 工做區:就是在電腦裏能看到的目錄。
- 暫存區:英文叫 stage,或 index。通常存放在「.git目錄」下的 index 文件(.git/index)中,因此暫存區有時也叫作索引(index)。
- 版本庫:工做區有一個隱藏目錄 .git,這個不算工做區,而是 Git 的版本庫。
圖中左側爲工做區,右側爲版本庫。在版本庫中標記爲「index」的區域是暫存區(stage,index),標記爲「master」的是 master 分支所表明的目錄樹。 圖中的 objects 標識的區域爲 Git 的對象庫,實際位於「.git/objects」目錄下,裏面包含了建立的各類對象及內容。 當對工做區修改(或新增)的文件執行「git add」命令時,暫存區的目錄樹被更新,同時工做區修改(或新增)的文件內容被寫入到對象庫中的一個新的對象中,而該對象的 ID 被記錄在暫存區的文件索引中。 當執行提交操做(git commit)時,暫存區的目錄樹寫到版本庫(對象庫)中,mater 分支會作相應的更新。即 master 指向的目錄樹就是提交時暫存區的目錄樹。 當執行「git reset HEAD」命令時,暫存區的目錄樹會被重寫,被 master 分支指向的目錄樹所替換,可是工做區不受影響。 當執行「git rm --cached <file>」命令時,會用暫存區所有或指定的文件替換工做區的文件。這個操做很危險,會清除工做區中未添加到暫存區的改動。 當執行「git checkout HEAD .」或「git checkout HEAD <file>」命令時,會用 HEAD 指向的 master 指向的分支中的所有或者部分文件替換暫存區和工做區中的文件。這個命令也是極具危險性的,由於不但會清除工做區中未提交的改動,也會清除暫存區中未提交的改動。