幾個(gè)基本操作
-
git add
命令實(shí)際上就是把要提交的所有修改放到暫存區(qū)(Stage)
- 執(zhí)行
git commit
就可以一次性把暫存區(qū)的所有修改提交到分支
管理修改
Git跟蹤并管理的是修改隆敢,而非文件
什么是修改刊懈?比如你新增了一行讨跟,這就是一個(gè)修改利赋,刪除了一行添祸,也是一個(gè)修改艳馒,更改了某些字符,也是一個(gè)修改匆浙,刪了一些又加了一些安寺,也是一個(gè)修改,甚至創(chuàng)建一個(gè)新文件首尼,也算一個(gè)修改挑庶。
第一次修改 -> git add -> 第二次修改 -> git add -> git commit
每次修改,如果不add
到暫存區(qū)软能,那就不會(huì)加入到commit
中迎捺。撤銷修改
場(chǎng)景1:當(dāng)你改亂了工作區(qū)某個(gè)文件的內(nèi)容,想直接丟棄工作區(qū)的修改時(shí)埋嵌,用命令git checkout -- file
場(chǎng)景2:當(dāng)你不但改亂了工作區(qū)某個(gè)文件的內(nèi)容破加,還添加到了暫存區(qū)時(shí)俱恶,想丟棄修改雹嗦,分兩步,第一步用命令git reset HEAD file
合是,就回到了場(chǎng)景1了罪,第二步按場(chǎng)景1操作。
場(chǎng)景3:已經(jīng)提交了不合適的修改到版本庫(kù)時(shí)聪全,想要撤銷本次提交泊藕,參考版本回退一節(jié),不過(guò)前提是沒(méi)有推送到遠(yuǎn)程庫(kù)难礼。刪除文件
一般情況下娃圆,你通常直接在文件管理器中把沒(méi)用的文件刪了,這個(gè)時(shí)候蛾茉,Git知道你刪除了文件讼呢,因此,工作區(qū)和版本庫(kù)就不一致了谦炬,git status
命令會(huì)立刻告訴你哪些文件被刪除了悦屏。
現(xiàn)在你有兩個(gè)選擇节沦,一是確實(shí)要從版本庫(kù)中刪除該文件,那就用命令git rm
刪掉础爬,并且git commit
現(xiàn)在甫贯,文件就從版本庫(kù)中被刪除了。
另一種情況是刪錯(cuò)了看蚜,因?yàn)榘姹編?kù)里還有呢叫搁,所以可以很輕松地把誤刪的文件恢復(fù)到最新版本:
$ git checkout -- test.txt
git checkout
其實(shí)是用版本庫(kù)里的版本替換工作區(qū)的版本,無(wú)論工作區(qū)是修改還是刪除供炎,都可以“一鍵還原”常熙。
遠(yuǎn)程倉(cāng)庫(kù)
- Github是個(gè)提供Git倉(cāng)庫(kù)托管服務(wù)的網(wǎng)站,本地Git倉(cāng)庫(kù)和Github倉(cāng)庫(kù)之間傳輸通過(guò)SSH加密碱茁。
- git clone 是把Github遠(yuǎn)程倉(cāng)庫(kù)克到自己電腦上的本地倉(cāng)庫(kù)
- $ git remote add origin git@github.com:michaelliao/learngit.git 用于將遠(yuǎn)程倉(cāng)庫(kù)和自己本地已存在的倉(cāng)庫(kù)關(guān)聯(lián)
- git push命令裸卫,把當(dāng)前分支master推送到遠(yuǎn)程
- 由于遠(yuǎn)程庫(kù)是空的,我們第一次推送master分支時(shí)纽竣,加上了-u參數(shù)墓贿,Git不但會(huì)把本地的master分支內(nèi)容推送的遠(yuǎn)程新的master分支,還會(huì)把本地的master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來(lái)蜓氨,在以后的推送或者拉取時(shí)就可以簡(jiǎn)化命令聋袋。
$ git push -u origin master
從現(xiàn)在起,只要本地作了提交穴吹,就可以通過(guò)命令:
$ git push origin master
把本地master分支的最新修改推送至GitHub
分支管理
- 每次提交(commit)幽勒,Git都把它們串成一條時(shí)間線,這條時(shí)間線就是一個(gè)分支港令。默認(rèn)master一個(gè)分支啥容。
- 當(dāng)我們創(chuàng)建新的分支,例如dev時(shí)顷霹,Git新建了一個(gè)指針叫dev咪惠,指向master相同的提交,再把HEAD指向dev淋淀,就表示當(dāng)前分支在dev上:
$ git checkout -b dev
Switched to a new branch 'dev'
這條命令等價(jià)于
$ git branch dev$ git checkout devSwitched to branch 'dev'
轉(zhuǎn)換完成后遥昧,可以用命令查看當(dāng)前處于哪個(gè)分支
$ git branch* dev master
從現(xiàn)在開(kāi)始,對(duì)工作區(qū)的修改和提交就是針對(duì)dev分支了朵纷,比如新提交一次后炭臭,dev指針往前移動(dòng)一步,而master指針不變:
$ git add readme.txt
$ git commit -m "branch test"
[dev fec145a] branch test 1 file changed, 1 insertion(+)
假如我們?cè)赿ev上的工作完成了袍辞,就可以把dev
合并到master上鞋仍。Git怎么合并呢?最簡(jiǎn)單的方法革屠,就是直接把master指向dev的當(dāng)前提交凿试,就完成了合并:
$ git checkout master
Switched to branch 'master'
$ git merge dev
Updating d17efd8..fec145a
Fast-forward readme.txt | 1 +
1 file changed, 1 insertion(+)
合并完分支后排宰,甚至可以刪除dev分支。刪除dev分支就是把dev指針給刪掉那婉,刪掉后板甘,我們就剩下了一條master分支:
$ git branch -d dev
Deleted branch dev (was fec145a).