原文地址和更多文章請點(diǎn)擊:http://i.woblog.cn
簡介
這篇文章就不談什么git原理,git和其他版本控制系統(tǒng)的優(yōu)勢,只記錄常用的,不過這些已經(jīng)夠大家工作中使用了
查看git版本
git version
獲取一個版本庫
這個步驟有兩個方式,一個是新項(xiàng)目,直接創(chuàng)建,一個是clone一個已有項(xiàng)目
git init
當(dāng)面目錄會自動生成一個.git目錄
初始化到當(dāng)前目錄上一層的a目錄里
git init ../a
git clone https://github.com/ruby/ruby.git
在當(dāng)前目錄下創(chuàng)建一個ruby目錄,里面才是clone下來的內(nèi)容
git clone https://github.com/ruby/ruby.git --depth=2
克隆最近兩個提交記錄,但內(nèi)容還是全的
git clone -b ruby_2_1 https://github.com/ruby/ruby.git
只克隆ruby_2_1分支
git clone https://github.com/ruby/ruby.git ruby-clone
克隆到ruby-clone目錄
查看狀態(tài)
git status
跟蹤文件
這一步是講文件添加到暫存區(qū)
git add a.txt
提交
git commit -m "init"
忽略一些文件
是在當(dāng)前目錄下創(chuàng)建.gitignore,如:
# 忽略所有 .a 結(jié)尾的文件
*.a
# 但 lib.a 除外
!lib.a
# 僅僅忽略項(xiàng)目根目錄下的 TODO 文件,不包括 subdir/TODO
/TODO
# 忽略 build/ 目錄下的所有文件,app/build/目錄也會忽略
build/
# 會忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
# ignore all .txt files in the doc/ directory
doc/**/*.txt
#忽略當(dāng)前目錄下0-9.txt
[0-9].txt
# 忽略dbg文件和dbg目錄
dbg
# 只忽略dbg文件,不忽略dbg目錄
dbg
!dbg/
# 只忽略當(dāng)前目錄下的dbg文件和目錄,子目錄的dbg不在忽略范圍內(nèi)
/dbg
查看狀態(tài)
git status
精簡模式
git status -s
輸出
M 11.txt
?? 12.txt
差異比較
工作目錄和暫存區(qū)域
git diff
比較git add后的文件和git commit后的文件,Git 1.6.1 及更高版本還允許使用 git diff --staged,效果是相同的,但更好記些。)
git diff --cached
提交
git add
git commit -m "init"
跳過add,第一次新添加的文件,必須git add,以后的更新,可以使用這條命令
git commit -a -m "init"
移除文件
要移除某個文件,先從暫存區(qū)移除,在提交
未添加到版本控制的直接刪除就行了
提交了的,
git rm a.txt
添加到了暫存,修改了的
git rm -f a.txt
刪除了都要git commit
刪除暫存或者已經(jīng)提交了的文件,但不在系統(tǒng)里刪除(將某個從跟蹤系統(tǒng)中去除)
git rm --cached a.txt
$ git rm log/*.log
注意到星號 * 之前的反斜杠 \, 因?yàn)?Git 有它自己的文件模式擴(kuò)展匹配方式,所以我們不用 shell 來幫忙展開。 此命令刪除 log/ 目錄下擴(kuò)展名為 .log 的所有文件。 類似的比如:
$ git rm *~
該命令為刪除以 ~ 結(jié)尾的所有文件。
移動文件
git mv 30.txt 31.txt
它相當(dāng)于運(yùn)行下面三條命令
mv README.md README
git rm README.md
git add README
查看提交歷史
輸出歷史課查看:http://www.ruanyifeng.com/blog/2012/08/how_to_read_diff.html
git log
左側(cè)顯示分支的演變
git log --graph
顯示兩條并顯示每次提交的內(nèi)容差異
git log -p -2
顯示每次提交的初略信息,所有被修改過的文件、有多少文件被修改了以及被修改過的文件的哪些行被移除或是添加了。 在每次提交的最后還有一個總結(jié)
git log --stat
格式化輸出(https://git-scm.com/book/zh/v2/Git-基礎(chǔ)-查看提交歷史)
git log --pretty=format:"%h - %an, %ar : %s"
近兩周的修改
git log --since=2.weeks
查看刪除了或添加了function_name的提交(從有到無或從無到有)
it log -Sfunction_name
顯示作者是pinging的提交,可以配置renpingqing等
git log --author pingqing
匹配提交的字符串內(nèi)容
git log --grep error
查看至于a.txt有關(guān)的提交
git log -- a/b/c.txt
查看2008 年 10 月期間,Junio Hamano 提交的但未合并的測試文件
git log --pretty="%h - %s" --author=gitster --since="2008-10-01"
--before="2008-11-01" --no-merges -- t/
撤銷
修改提交信息,他會修改最近一次提交信息
git commit --amend
忘記提交了某些文件,最后一次提交會覆蓋initial commit信息
git commit -m 'initial commit'
git add forgotten_file
git commit --amend
取消暫存的文件
比如遇到這種情況,假設(shè)我工作目錄有兩個文件,我想要的是一個文件提交一次,但是不小心執(zhí)行了git add .
這時候只需要將文件從暫存區(qū)撤銷回來
git reset HEAD 2.txt
撤銷當(dāng)前改動的文件,未添加到工作區(qū)
git checkout a.txt