git的日常操作流workflow
先看git的三個(gè)’階段’
working tree/working directory:可簡單理解為本地副本。
The working directory is a single checkout of one version of the project. These files are pulled out of the compressed database in the Git directory and placed on disk for you to use or modify.
index/staging area:可簡單理解為緩存區(qū)秘案。
The staging area is a file, generally contained in your Git directory, that stores information about what will Go into your next commit. It’s sometimes referred to as the “index”, but it’s also common to refer to it as the staging area.
repository:分為local repository(本地的版本庫)和remote repository(遠(yuǎn)程倉庫)由于第一章節(jié)所描述的分布式設(shè)計(jì),每個(gè)人的電腦都是一個(gè)完整的版本庫,所以倆者內(nèi)容實(shí)質(zhì)是一樣的叫榕。
The Git directory is where Git stores the metadata and object database for your project. This is the most important part of Git, and it is what is copied when you clone a repository from another computer.
三個(gè)階段的簡易聯(lián)系
working tree ->git add->index 缺狠, index->git commit->repository
再看git的四種文件狀態(tài)
官方文檔給出了git版本管理系統(tǒng)下的文件的各種狀態(tài),包括untracked(無跡可尋的)、unmodified(未修改的)颈将、modified(修改的)焙蚓、staged(進(jìn)階階段之后的’)
下面的這張圖更清晰的描述了git各種操作指令對版本控制各狀態(tài)的影響
注意:
git fetch是從遠(yuǎn)程拉取代碼到本地村生,只是拉取。
git rebase用于把一個(gè)分支的修改合并到當(dāng)前分支灶轰。
git pull不僅拉取到本地還merge到本地分支中噪奄。所以git pull是git fetch與git merge的集合體死姚。
git pull = git fetch + git merge
git pull --rebase = git fetch + git rebase
git checkout 所做的事情就是將命令行對應(yīng)的版本庫中或者index中的文件拷貝出來,粘貼到working directory(如果參數(shù)是版本庫也會(huì)拷貝到index區(qū)域)區(qū)域中
備注
注意勤篮,不要將git所管理的文件的狀態(tài)(untracked都毒、unmodified、modified碰缔、staged)與git自身的階段(working tree账劲、index、local repository手负、remote repository)相混淆涤垫。
working directory中的文件可以包含多種狀態(tài),例如從版本庫上一次提交snapshot檢出的文件處于tracked和unmodified狀態(tài)竟终、本地對tracked文件的任何修改會(huì)使文件處于modified和staged(git add操作即可)狀態(tài)蝠猬,本地新增文件或其他操作會(huì)使得文件處于untracked狀態(tài);
index中的文件只能處于modified和staged狀態(tài)(同時(shí)處于)统捶;
repository(local or remote)中文件的狀態(tài)只能處于unmodified的跟蹤狀態(tài)榆芦。
——當(dāng)然這句話還有待考究柄粹,這里嚴(yán)格意義來說是從repository中檢出的文件只能處于unmodified的tracked狀態(tài),因?yàn)槟阒荒軓膭e的倉庫中將unmodified的tracked狀態(tài)的文件拉倒本地匆绣。但原始的倉庫中其實(shí)有可能存在著其他狀態(tài)的文件驻右,但是對外來講是隱藏的、透明的崎淳。