在此對經(jīng)常用到的一些git命令進(jìn)行總結(jié)
git基本操作
git config --global user.name "Name"
git config --global user.email "emailaddress"
這個(gè)命令會(huì)在"~/.gitconfig"輸出設(shè)置文件。
git init初始化倉庫
git status查看狀態(tài)
git add添加文件,其實(shí)更準(zhǔn)確的說應(yīng)該是跟蹤文件。這個(gè)命令有多個(gè)功能,可以用它跟蹤一個(gè)新文件,也可以把已經(jīng)跟蹤的文件放到暫存區(qū),還能用于合并時(shí)把有沖突的文件標(biāo)記為已解決狀態(tài)等??梢岳斫膺@個(gè)命令為"添加內(nèi)容到下一次提交中"。
.gitignore不想納入Git管理的文件可以在此文件中列出。
git commit -m "..."保存?zhèn)}庫的歷史記錄(-m可以不加,之后會(huì)出現(xiàn)詳細(xì)記錄部分,第一行簡述,第二行空格,第三行是記述更改的原因和詳細(xì)內(nèi)容)
git reset --hard HEAD重置命令,讓工作目錄回到上次提交的狀態(tài)。(如果只是恢復(fù)一個(gè)文件的話可以用git checkout file_name)
git log查看提交日志
git diff查看更改前后的差別,包括工作樹、暫存區(qū)、最新提交之間的差別(+號是新添加的行,被刪除的行用-),
可以加HEAD,這里的HEAD是指向當(dāng)前分支中最新一次提交的指針。
git rm可以用此命令從Git中移除某個(gè)文件。先從暫存區(qū)移除然后再提交。
git mv file_from file_to將文件重命名。分支操作
git branch 分支名創(chuàng)建分支名,也會(huì)在當(dāng)前提交對象上創(chuàng)建一個(gè)指針??梢约?code>-d參數(shù)來刪除一個(gè)分支。如果僅僅運(yùn)行git branch會(huì)得到當(dāng)前所有分支的一個(gè)列表。

Git的"master"分支并不是一個(gè)特殊分支。它就跟其他分支完全沒有區(qū)別。之所以幾乎每一個(gè)倉庫都有master分支,是因?yàn)?code>git init命令默認(rèn)創(chuàng)建它,并且大多數(shù)人一般都不去改動(dòng)它。
Git有一個(gè)名為HEAD的特殊指針,指向當(dāng)前所在的本地分支。可以用git log --decorate來查看各個(gè)分支當(dāng)前所指的對象。
git checkout 分支名 可以切換到一個(gè)已經(jīng)存在的分支。
git log --online --decorate --graph --all 這行命令會(huì)輸出提交歷史、各個(gè)分支的指向以及項(xiàng)目的分支分叉情況。
git merge 分支名 合并分支
如果順著一個(gè)分支走下去能夠到達(dá)另一個(gè)分支,Git在合并這兩個(gè)分支的時(shí)候就只會(huì)簡單的將指針向前推進(jìn),因?yàn)檫@種情況下的合并操作沒有需要解決的分歧,這種情況稱之為『快進(jìn)』,(fast-forward)。
git ls-remote (remote) 獲得遠(yuǎn)程引用的完整列表,或者用git remote show (remote) 獲得遠(yuǎn)程分支的更多信息。
git fetch 更新自己的遠(yuǎn)程倉庫引用
git pull 拉取命令,大多數(shù)情況下它的含義是一個(gè)git fetch 加一個(gè) git merge。
git push [remote-name] [branch-name] 推送到遠(yuǎn)程倉庫服務(wù)器。
git stash 保存當(dāng)前操作(或者說是保存工作目錄的中間狀態(tài))。加list參數(shù)可以查看一系列的存儲(chǔ)。git stash pop stash@{num}用來恢復(fù)儲(chǔ)存,num是要恢復(fù)的儲(chǔ)存的序號。git stash pop命令是恢復(fù)stash隊(duì)列中的stash@{0},不過相應(yīng)的儲(chǔ)存記錄會(huì)被刪除。也可以用git stash apply來應(yīng)用最近的保存的儲(chǔ)存,或者加stash@{num}來指定應(yīng)用哪一個(gè)儲(chǔ)存。git stash clear用來清除所有的儲(chǔ)存記錄。
著重說一下git rebase ,一個(gè)區(qū)別于merge的命令,可以用以下圖片來比較這兩個(gè)命令的不同:

使用git merge合并分支

如果想讓"mywork"分支歷史看起來像沒有經(jīng)過任何合并一樣,使用git rebase。
git rebase origin```
這些命令會(huì)把"mywork"分支里的每個(gè)提交(commit)取消掉,并且把它們臨時(shí) 保存為補(bǔ)丁(patch)(這些補(bǔ)丁放到".git/rebase"目錄中),然后把"mywork"分支更新 到最新的"origin"分支,最后把保存的這些補(bǔ)丁應(yīng)用到"mywork"分支上。
當(dāng)'mywork'分支更新之后,它會(huì)指向這些新創(chuàng)建的提交(commit),而那些老的提交會(huì)被丟棄。 如果運(yùn)行垃圾收集命令`pruning garbage collection`, 這些被丟棄的提交就會(huì)刪除.

兩個(gè)命令所產(chǎn)生的歷史區(qū)別:

在rebase的過程中,也許會(huì)出現(xiàn)沖突(conflict). 在這種情況,Git會(huì)停止rebase并會(huì)讓你去解決 沖突;在解決完沖突后,用`git-add`命令去更新這些內(nèi)容的索引(index), 然后,無需執(zhí)行`git-commit`,只要執(zhí)行`git rebase --continue`這樣git會(huì)繼續(xù)應(yīng)用(apply)余下的補(bǔ)丁。
在任何時(shí)候,都可以用`--abort`參數(shù)來終止`rebase`的行動(dòng),并且"mywork" 分支會(huì)回到`rebase`開始前的狀態(tài)。`git rebase --abort`
推薦大家?guī)讉€(gè)學(xué)習(xí)Git的網(wǎng)站:
[http://learngitbranching.js.org/](http://learngitbranching.js.org/) (很不錯(cuò)的git分支練習(xí)網(wǎng)站)
[Git學(xué)習(xí)文檔](https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%85%B3%E4%BA%8E%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6)
以上為常用的一些命令,在學(xué)習(xí)的過程中遇到的其他的常用命令以及知識點(diǎn)會(huì)陸續(xù)補(bǔ)充,未完待續(xù)...
####參考資料
[git-scm.com](https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%85%B3%E4%BA%8E%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6)
[Git Community Book 中文版](http://gitbook.liuhui998.com/4_2.html)
《GitHub入門與實(shí)踐》