Git常用命令

git config —global user.name “Nshen” //必須
git config —global user.emailnshen121@gmail.com” //必須
git config —global color.ui “always” //或者"auto", always不僅Base環(huán)境是彩色,Dos里也是彩色的。
git config —global core.editor notepad.exe //設(shè)為windows記事本
git config —global alias.ci “commit” //別名縮寫(xiě)
git config —global merge.tool //可以設(shè)置合并工具
git config —global —list //查看設(shè)置
其實(shí)最后這些設(shè)置都保存在C:\Documents and Settings\用戶名.gitconfig 文件下(windows)
查看幫助: git help command

初始化 :

git init

納入版本控制:

git add *.txt //添加所有txt文件
git add README //添加單個(gè)文件
git add . //添加所有文件包括子目錄,但不包括空目錄
add命令是個(gè)多功能命令,根據(jù)目標(biāo)文件的狀態(tài)不同,此命令的效果也不同:可以用它開(kāi)始跟蹤新文件,或者把已跟蹤的文件放到暫存區(qū),還能用于合并時(shí)把有沖突的文件標(biāo)記為已解決狀態(tài)等)注意每次修改后都要重新add,不然就會(huì)提交之前add時(shí)的版本。
git add -i //進(jìn)入交互式add
git add -p //直接進(jìn)入補(bǔ)丁模式,可以暫存修改的一部分。

提交:

git commit -m “initial project version”
git commit -m “something” someFile //提交指定文件
git commit -C HEAD -a —amend //復(fù)用HEAD留言,增補(bǔ)提交(修改小錯(cuò)誤,而不增加提交記錄,掩蓋自己的小馬虎)

參數(shù):

-m “提交的說(shuō)明”
-a 動(dòng)把所有已經(jīng)跟蹤過(guò)的文件暫存,并提交.(工作目錄中修改過(guò)的文件都提交到版本庫(kù),不需一個(gè)一個(gè)手動(dòng)add了)
—amend 增補(bǔ)提交
-C 復(fù)用指定提交的提交留言
-c 打開(kāi)編輯器在已有的提交基礎(chǔ)上編輯修改
e.g 修改最后一次提交:
git commit -m 'initial commit'git add forgotten_filegit commit --amend
如果沒(méi)有修改就相當(dāng)于更改提交說(shuō)明,上邊3個(gè)命令得到一個(gè)提交.
忽略提交的文件:
所有人都需要忽略的文件要寫(xiě)在.gitignore文件里,而只有自己的個(gè)人偏好需要忽略的文件要寫(xiě)在.git/info/exclude文件中

語(yǔ)法:

# 此為注釋 – 將被 Git 忽略***.a # **忽略所有 .a 結(jié)尾的文件!lib.a # 但 lib.a 除外 ***.[oa] # **忽略以.o或.a結(jié)尾的文件 ***~ # *忽略以~結(jié)尾的文件/TODO # 僅僅忽略項(xiàng)目根目錄下的 TODO 文件,不包括 subdir/TODObuild/ # 忽略 build/ 目錄下的所有文件doc/.txt # 會(huì)忽略 doc/notes.txt 但不包括 doc/server/arch.txt查看文件改動(dòng):
git diff // 比較工作目錄與緩存區(qū)的區(qū)別
git diff —cached 或者 git diff —staged //緩存區(qū)與版本庫(kù)里的區(qū)別
git diff HEAD //三者的區(qū)別
(請(qǐng)注意,單單 git diff 不過(guò)是顯示還沒(méi)有暫存起來(lái)的改動(dòng),而不是這次工作和上次提交之間的差異。所以有時(shí)候你一下子暫存了所有更新過(guò)的文件后,運(yùn)行 git diff 后卻什么也沒(méi)有,就是這個(gè)原因。)
git diff 18f822e //18f822e這個(gè)版本與當(dāng)前目錄的區(qū)別
git diff aaaaa..bbbbb //比較aaaaa與bbbbb之間差別
git diff —stat可以統(tǒng)計(jì)數(shù)據(jù),比較特別的命令
重命名,移動(dòng),刪除文件:
git mv file_from file_to //改名或移動(dòng)
$ git mv README.txt README$ git status# On branch master# Your branch is ahead of 'origin/master' by 1 commit.## Changes to be committed:#(use "git reset HEAD <file>..." to unstage)## renamed: README.txt -> README
其實(shí),運(yùn)行 git mv 就相當(dāng)于運(yùn)行了下面三條命令:
$ mv README.txt README
$ git rm README.txt
$ git add README
必須調(diào)用 git rm 文件名 //從暫存區(qū)移除,并且文件也被刪除
如果只是手工刪除了文件,運(yùn)行g(shù)it status時(shí)會(huì)出現(xiàn)

# Changed but not updated:#(use "git add/rm <file>..." to update what will be committed)## deleted: grit.gemspec
此時(shí)必須再運(yùn)行 git rm 文件名,才會(huì)在提交時(shí)候不再納入版本管理.
如果刪除之前修改過(guò)并且已經(jīng)add到緩存區(qū)了的話,則必須強(qiáng)制刪除 -f
另外一種情況是,我們想把文件從Git倉(cāng)庫(kù)中刪除(亦即從暫存區(qū)域移除),但仍然希望保留在當(dāng)前工作目錄中。換句話說(shuō),僅是從跟蹤清單中刪除。比如一些大型日志文件或者一堆.a編譯文件,不小心納入倉(cāng)庫(kù)后,要移除跟蹤但不刪除文件,以便稍后在 .gitignore 文件中補(bǔ)上,用 —cached 選項(xiàng)即可:

查看狀態(tài):查看當(dāng)前狀態(tài):

git status
$ git status# On branch master# Changes to be committed: //只要在這行后邊的,說(shuō)明放入暫存區(qū)了#(use "git reset HEAD <file>..." to unstage) //想取消放入緩存 git reset HEAD README## new file: README# Changed but not updated: //跟蹤文件內(nèi)容改變,但還沒(méi)有放到暫存區(qū),需要git add 命令才會(huì)放到暫存區(qū)#(use "git add <file>..." to update what will be committed)#(use "git checkout -- <file>..." to discard changes in working directory) //刪除修改,恢復(fù)到之前版本,有危險(xiǎn) (如果想保留并且回退版本用stashing 和分支來(lái)處理)# modified: benchmarks.rb查看提交歷史:
git log
這時(shí)“j”向下瀏覽,“k”向上瀏覽,“q”退出
git log —pretty=oneline //一行顯示
—pretty=“%h %s” //以各種格式輸出
git log –p -2 //-p顯示每次提交的內(nèi)容差異 -2表示最近2次更改
git log —since “5 hours”
—since “3 hours”
—since “1 minute”
—before =“2008-10.01”
git log 27j34j3j..03u43u23 //最老版本..最新版本(不包括起點(diǎn)只包括終點(diǎn))
git log 34j4j4..HEAD
git log fhfs8fh.. //省略HEAD
git log “HEAD^”..“HEAD” //windows必須加引號(hào)表示回溯上一個(gè)提交
git log -1 HEAD~1 //相當(dāng)于git log -1 HEAD^

問(wèn)責(zé):查明誰(shuí)修改了代碼

git blame hello.html //你也可以用"-L"參數(shù)在命令(blame)中指定開(kāi)始#####和結(jié)束行:
git blame -L 12,+10 hello.html //12到22行
blame還可以跟蹤內(nèi)容復(fù)制,文件復(fù)制,略,見(jiàn)版本控制之道 79頁(yè)

撤銷(xiāo):撤銷(xiāo)緩存區(qū)的修改(沒(méi)有commit的)

git checkout head 文件名 //撤銷(xiāo)暫存區(qū)的修改
git checkout head readme.txt todo.txt
git checkout head *.txt
git checkout head . //撤銷(xiāo)所有

反轉(zhuǎn)提交:

git revert HEAD //創(chuàng)建一個(gè)反向的新提交抵消原來(lái)的提交改動(dòng)
如果需要反轉(zhuǎn)多個(gè),必須從最后的開(kāi)始反轉(zhuǎn), 加 -n可以不馬上提交,之后一起提交。
git revert -n HEAD
git revert -n 54efhds
git commit -m “revert head and 54efhds”

復(fù)位:還沒(méi)有commit,讓工作目錄回到上次提交時(shí)的狀態(tài)

git reset —hard HEAD //所有未提交的內(nèi)容清空,這會(huì)讓"git diff" 和"git diff —cached"命令的顯示法都變?yōu)榭?br> git reset —soft HEAD //復(fù)位版本庫(kù),暫存差異,便于提交中發(fā)現(xiàn)錯(cuò)誤需要更改時(shí)有用(例如私人密碼放到里邊了)
分支:在當(dāng)前分支末梢建立分支:
git branch RB_1.0(建立分支不會(huì)自動(dòng)切換過(guò)去)

切換分支:

git checkout RB_1.0(切換到RB_1.0分支)
創(chuàng)建并切換分支:
git checkout -b RB_1.0(簡(jiǎn)化上邊2步操作)

刪除分支:

git branch -d RB_1.0
基于某次提交、分支或標(biāo)簽創(chuàng)建新分支:
git branch RB_1.0 master
git branch RB_1.0 6fe57de0
git branch Rb_1.01 1.0

查看分支:git branch //列出本地分支 iss53* master //*號(hào)表示當(dāng)前所在分支 testing

git branch -r //顯示遠(yuǎn)程分支
git branch -a //列出所有分支

分支重命名:

git branch -m master mymaster
-M 大寫(xiě)M會(huì)覆蓋同名的分支

合并分支:

直接合并:
git merge 想合并到當(dāng)前分支的源分支名
git merge —no-commit 分支 //合并但不提交
壓合合并:將分支壓合成一條commit記錄,并合并過(guò)來(lái)
git merge —squash 某bug分支
git commit -m “修復(fù)某bug”
揀選合并:只合并一個(gè)提交
git cherry-pick 321d76f
如果需要連續(xù)揀選,就需要加 -n參數(shù)
然后再git commit ,但不要加-m參數(shù),編輯器就會(huì)使用剛揀選的提交留言作為現(xiàn)在的留言。
標(biāo)簽Tag:查看標(biāo)簽:
git tag

創(chuàng)建標(biāo)簽:

git tag 1.0 //在當(dāng)前分支最后一次提交創(chuàng)建標(biāo)簽
git tag 1.0 RB_1.0 //基于RB_1.0分支的最新踢腳創(chuàng)建標(biāo)簽
git tag 1.0 ae468d8kt //為某次提交創(chuàng)建標(biāo)簽

檢出標(biāo)簽:

git checkout 1.0 //檢出標(biāo)簽與檢出分支一樣操作,但檢出標(biāo)簽后用git branch查看本地分支會(huì)發(fā)現(xiàn)你現(xiàn)在不再任何分支上
這時(shí)你不應(yīng)該修改,而應(yīng)該立即基于此標(biāo)簽創(chuàng)建一個(gè)分支
git checkout -b from-1.0

變基:

1)git rebase RB_1.01 //也許修改過(guò)一個(gè)bug,希望新版本變基到RB_1.01分支上
2)手動(dòng)解決沖突 //如果解決不了直接git rebase -abort來(lái)跳過(guò)特定提交或完全放棄變基
3)git add xxx.html //沖突解決
4)git rebase —continue
git rebase --onto HEAD^^ HEAD^ HEAD
//—onto參數(shù)可以改寫(xiě)歷史抹掉中間的參數(shù),將倒數(shù)第一個(gè)參數(shù)變基到倒數(shù)第3個(gè)參數(shù),為防止出錯(cuò)建議在試驗(yàn)性分支上先試驗(yàn)。
rebase -i 可以排序歷史記錄,多個(gè)提交合并為1個(gè),一個(gè)提交分解成多個(gè)提交 ,
詳見(jiàn)版本控制之道p86 ,需要編輯器支持,windows記事本不行
遠(yuǎn)程相關(guān):
git clone git://github.com/schacon/grit.git //從現(xiàn)有倉(cāng)庫(kù)克隆
git clone git://github.com/schacon/grit.git mygrit //換名,唯一區(qū)別就是新建的目錄成了mygrit,其他都一樣

添加遠(yuǎn)程倉(cāng)庫(kù):

git remote add pb git://github.com/paulboone/ticgit.git
clone會(huì)默認(rèn)添加origin倉(cāng)庫(kù),如果原本用git init創(chuàng)建的版本庫(kù),后來(lái)又想提交到遠(yuǎn)程版本庫(kù),就可以用下邊的辦法
git remote add origin git@example.com:/xxxxxx

查看遠(yuǎn)程分支:

git remote -v //查看遠(yuǎn)程倉(cāng)庫(kù),默認(rèn)clone后,應(yīng)該有一個(gè)origin倉(cāng)庫(kù),-v顯示對(duì)應(yīng)的clone地址
git remote show origin //查看遠(yuǎn)程倉(cāng)庫(kù)信息

遠(yuǎn)程倉(cāng)庫(kù)重命名和刪除:

git remote rename pb paul
git remote rm paul

獲取數(shù)據(jù):

git fetch [remote-name] 拉取遠(yuǎn)程倉(cāng)庫(kù)到本地遠(yuǎn)程倉(cāng)庫(kù),不自動(dòng)合并 //$ git fetch origin$ git fetch pbremote: Counting objects: 58, done.remote: Compressing objects: 100% (41/41), done.remote: Total 44 (delta 24), reused 1 (delta 0)Unpacking objects: 100% (44/44), done.From git://github.com/paulboone/ticgit* [new branch] master -> pb/master* [new branch] ticgit -> pb/ticgit
現(xiàn)在pb/master可以在本地訪問(wèn)了,你可以合并到自己的某個(gè)分支,或者切換到這個(gè)分支看看有什么有趣的更新
git pull 抓取數(shù)據(jù)合并到工作目錄中當(dāng)前分支

推送數(shù)據(jù):

git push [remote-name] [branch-name] //默認(rèn)為 git push origin master
git push origin serverfix //推送分支,其實(shí)是下邊一句的簡(jiǎn)化,提取我的 serverfix 并更新到遠(yuǎn)程倉(cāng)庫(kù)的 serverfix
git push origin serverfix:serferfix
git push origin :serverfix //這個(gè)語(yǔ)法用于刪除,只要把分號(hào)前留空

其他:

git gc //垃圾回收,每隔一段時(shí)間例如一個(gè)月運(yùn)行一次可以減少磁盤(pán)占用空間。
git reflog //最后的保障,列出誤刪的東東
git bisect //二分查找,版本控制之道p124頁(yè),略
歸檔版本庫(kù),導(dǎo)出壓縮包:
git archive —format=格式 —prefix=目錄/ 版本>壓縮包.zip
git archive —format=zip head>test.zip
git archive —format=tar —prefix=mysite-1.0/ 1.0 | gzip>mysite-1.0.tar.gz
git archive —format=zip —prefix=mysite-1.0/ 1.0 >mysie-1.0.zip

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,572評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,071評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 175,409評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 62,569評(píng)論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,360評(píng)論 6 404
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 54,895評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,979評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,123評(píng)論 0 286
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,643評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,559評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,742評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,250評(píng)論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 43,981評(píng)論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,363評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,622評(píng)論 1 280
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,354評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,707評(píng)論 2 370

推薦閱讀更多精彩內(nèi)容

  • git branch 查看本地所有分支 git status 查看當(dāng)前狀態(tài) git commit 提交 git b...
    猿萬(wàn)閱讀 5,078評(píng)論 1 45
  • 配置 首先是配置帳號(hào)信息 ssh -T git@github.com#登陸github 修改項(xiàng)目中的個(gè)人信息 1 ...
    rochuan閱讀 737評(píng)論 1 1
  • Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉(cāng)庫(kù)完整的鏡像下來(lái)。這樣一來(lái),任何一處協(xié)同...
    __silhouette閱讀 15,922評(píng)論 5 147
  • 你聽(tīng)青草的香味,你看鳥(niǎo)的鳴叫,你聞花的妖艷,其實(shí)春天還在,只是你走遠(yuǎn)了,到夏天去了。
    梵高的紅豆閱讀 135評(píng)論 0 0
  • 千里之行 始于足下 今天開(kāi)始老何與大家分享Android開(kāi)發(fā)Java語(yǔ)言部分,該如何學(xué)好一門(mén)編程語(yǔ)言呢?老...
    老何解碼閱讀 692評(píng)論 4 0