git

1.安裝Git

Linux
sudo apt-get install git
Windows
下載安裝程序茸苇,(網(wǎng)速慢的同學請移步國內(nèi)鏡像
安裝完成后箭阶,在開始菜單里找到“Git”->“Git Bash”殊轴,蹦出一個類似命令行窗口的東西,就說明Git安裝成功砖茸!

還需要最后一步設(shè)置,在命令行輸入自報家門:
 git config --global user.name "dingto" 
 git config --global user.email "2524370217@" 

2.Git和其他版本控制系統(tǒng)如SVN的一個不同之處就是有暫存區(qū)的概念。

Git管理的是修改曙搬,而不是文件

工作區(qū)(Working Directory)

就是你在電腦里能看到的目錄,比如我的learngit文件夾就是一個工作區(qū)

版本庫(Repository)

工作區(qū)有一個隱藏目錄.git媒怯,這個不算工作區(qū)订讼,而是Git的版本庫

Git的版本庫里存了很多東西扇苞,其中最重要的就是稱為stage(或者叫index)的暫存區(qū)欺殿,
還有Git為我們自動創(chuàng)建的第一個分支master,以及指向master的一個指針叫HEAD

3.創(chuàng)建一個版本庫

git init xx

4.添加文件到Git倉庫:

第一步是用git add把文件添加進去鳖敷,實際上就是把文件修改添加到暫存區(qū)
git add xx / git add .
第二步是用git commit提交更改脖苏,實際上就是把暫存區(qū)的所有內(nèi)容提交到當前分支
git commit -m "xx"

5.隨時掌握工作區(qū)的狀態(tài),使用git status命令定踱。

如果git status告訴你有文件被修改過棍潘,

git diff未commit前可看修改內(nèi)容。

6.在版本的歷史之間穿梭崖媚,

  • 穿梭前亦歉,用git log可以查看提交歷史,以便確定要回退到哪個版本畅哑。
  • 要重返未來肴楷,用git reflog查看命令歷史,以便確定要回到未來的哪個版本
    如果嫌輸出信息太多荠呐,加上--pretty=oneline
    git log --graph --pretty=oneline --abbrev-commit
    git reset --hard HEAD^HEAD指向的版本就是當前版本赛蔫。上一個版本就是HEAD^,上上一個版本就是HEAD^^泥张,當然往上100個版本寫100個^比較容易數(shù)不過來呵恢,所以寫成HEAD~100。

git reset --hard commit_id穿梭

7.直接丟棄工作區(qū)的修改

git checkout -- file

當你不但改亂了工作區(qū)某個文件的內(nèi)容圾结,還添加到了暫存區(qū)時瑰剃,想丟棄修改,分兩步

第一步用命令git reset HEAD <file>筝野,就回到了場景1晌姚,
第二步按場景1操作粤剧。 已經(jīng)提交了不合適的修改到版本庫時,想要撤銷本次提交挥唠,參考版本回退一節(jié)抵恋,不過前提是沒有推送到遠程庫。

從版本庫中刪除該文件

用命令git rm刪掉宝磨,并且git commit

另一種情況是刪錯了弧关,因為版本庫里還有
git checkout filename其實是用版本庫里的版本替換工作區(qū)的版本,無論工作區(qū)是修改還是刪除唤锉,都可以“一鍵還原”世囊。

8.本地Git倉庫和GitHub倉庫

第1步:創(chuàng)建SSH Key:
ssh-keygen -t rsa -C "2524370217@qq.com"
在用戶主目錄里找到.ssh目錄,里面有id_rsa和id_rsa.pub兩個文件窿祥,這兩個就是SSH Key的秘鑰對株憾,id_rsa是私鑰,不能泄露出去晒衩,id_rsa.pub是公鑰嗤瞎,可以放心地告訴任何人。
第2步:登陸GitHub听系,打開“Account settings”贝奇,“SSH Keys”頁面:
然后,點“Add SSH Key”靠胜,填上任意Title掉瞳,在Key文本框里粘貼id_rsa.pub文件的內(nèi)容:
首先,登陸GitHub髓帽,然后菠赚,在右上角找到“Create a new repo”按鈕,創(chuàng)建一個新的倉庫:
在本地關(guān)聯(lián)的就是我的遠程庫git remote add origin git@github.com:git名/庫名.git
把本地庫的所有內(nèi)容推送到遠程庫上: git push -u origin master由于遠程庫是空的郑藏,我們第一次推送master分支時衡查,加上了-u參數(shù),Git不但會把本地的master分支內(nèi)容推送的遠程新的master分支必盖,還會把本地的master分支和遠程的master分支關(guān)聯(lián)起來拌牲,在以后的推送或者拉取時就可以簡化命令。

從現(xiàn)在起歌粥,只要本地作了提交塌忽,就可以通過命令:git push origin master同步到遠程倉庫

取消本地目錄下關(guān)聯(lián)的遠程庫:git remote remove origin

git init               
git add .              
git commit -m "My first commit operation"  
# 添加遠程倉庫地址,保存在origin變量中
git remote add origin git@github.com:tomding/888.git   
# 用命令git clone克隆一個本地庫:
git clone git@github.com:git名/庫名.git  
 # 按照前一條命令中origin給定的github地址推送到github倉庫的master分支
git push origin master    

9.分支管理

查看分支:git branch

創(chuàng)建分支:git branch 分支名

切換分支:git checkout 分支名

創(chuàng)建+切換分支:git checkout -b 分支名

合并某分支到當前分支:git merge --no-ff -m "merge with no-ff" dev
git merge 分支名

刪除分支:git branch -d 分支名
如果要丟棄一個沒有被合并過的分支失驶,可以通過git branch -D <name>強行刪除土居。

當Git無法自動合并分支

必須首先解決沖突。解決沖突后,再提交擦耀,合并完成棉圈。

解決沖突就是把Git合并失敗的文件手動編輯為我們希望的內(nèi)容,再提交眷蜓。

git log --graph命令可以看到分支合并圖分瘾。

10.把當前工作現(xiàn)場“儲藏”起來,等以后恢復(fù)現(xiàn)場后繼續(xù)工作

git stash

git stash list看剛才的工作現(xiàn)場

工作現(xiàn)場還在吁系,Git把stash內(nèi)容存在某個地方了德召,但是需要恢復(fù)一下,有兩個辦法:

一是用git stash apply恢復(fù)汽纤,但是恢復(fù)后上岗,stash內(nèi)容并不刪除,你需要用git stash drop來刪除蕴坪; 另一種方式是用git stash pop液茎,恢復(fù)的同時把stash內(nèi)容也刪了

你可以多次stash,恢復(fù)的時候辞嗡,先用git stash list查看,然后恢復(fù)指定的stash滞造,用命令:git stash apply stash@{0}

修復(fù)bug時续室,我們會通過創(chuàng)建新的bug分支進行修復(fù),然后合并谒养,最后刪除挺狰;

當手頭工作沒有完成時,先把工作現(xiàn)場git stash一下买窟,然后去修復(fù)bug丰泊,修復(fù)后,再git stash pop始绍,回到工作現(xiàn)場瞳购。

推送分支

當你從遠程倉庫克隆時,實際上Git自動把本地的master分支和遠程的master分支對應(yīng)起來了亏推,并且学赛,遠程倉庫的默認名稱是origin。
查看遠程庫的信息吞杭,git remote -v

推送時盏浇,要指定本地分支,這樣芽狗,Git就會把該分支推送到遠程庫對應(yīng)的遠程分支上:git push origin master

多人協(xié)作的工作模式通常是這樣
現(xiàn)在我們的小伙伴要在dev分支上做開發(fā)绢掰,就必須把遠程的origin的dev分支到本地來,于是可以使用命令創(chuàng)建本地dev分支:
git checkout –b dev origin/dev

推送: git push origin dev

如果推送失敗,則因為遠程分支比你的本地更新滴劲,需要先用git pull試圖合并攻晒;
如果合并有沖突,則解決沖突哑芹,并在本地提交炎辨; 沒有沖突或者解決掉沖突后,再用push推送就能成功聪姿!
如果git pull提示no tracking information碴萧,則說明本地分支和遠程分支的鏈接關(guān)系沒有創(chuàng)建,用命令git branch --set-upstream-to=origin/dev dev

rebase把本地未push的分叉提交歷史整理成直線末购;

  • rebase之前需要經(jīng)master分支拉到最新

  • 切換分支到需要rebase的分支破喻,這里是dev分支

  • git rebase 后再git merge

  • 執(zhí)行g(shù)it rebase master,有沖突就解決沖突盟榴,解決后直接git add . 再git - rebase --continue即可

打標簽

首先曹质,切換到需要打標簽的分支上,敲命令git tag <name>就可以打一個新標簽
查看所有標簽:git tag

默認標簽是打在最新提交的commit上的。有時候擎场,如果忘了找到歷史提交的commit id羽德,然后打上就可以了:git tag v0.9 f52c633

注意,標簽不是按時間順序列出迅办,而是按字母排序的宅静。可以用git show <tagname>查看標簽信息:

創(chuàng)建帶有說明的標簽:git tag -a v0.1 -m "version 0.1 released" 1094adb

注意:標簽總是和某個commit掛鉤站欺。如果這個commit既出現(xiàn)在master分支姨夹,又出現(xiàn)在dev分支,那么在這兩個分支上都可以看到這個標簽矾策。

如果標簽打錯了磷账,也可以刪除:git tag -d v0.1

因為創(chuàng)建的標簽都只存儲在本地,不會自動推送到遠程贾虽。所以逃糟,打錯的標簽可以在本地安全刪除。

如果要推送某個標簽到遠程蓬豁,使用命令git push origin <tagname>
或者履磨,一次性推送全部尚未推送到遠程的本地標簽:git push origin --tags
如果標簽已經(jīng)推送到遠程,要刪除遠程標簽就麻煩一點庆尘,先從本地刪除:git tag -d v0.9然后剃诅,從遠程刪除。刪除命令也是push驶忌,但是格式如下:git push origin :refs/tags/v0.9
要看看是否真的從遠程庫刪除了標簽矛辕,可以登陸GitHub查看笑跛。

忽略文件

touch .gitignore
不需要從頭寫.gitignore文件,GitHub已經(jīng)為我們準備了各種配置文件聊品,只需要組合一下就可以使用了。所有配置文件可以直接在線瀏覽:https://github.com/github/gitignore

.gitignore只能忽略那些原來沒有被track的文件翻屈,如果某些文件已經(jīng)被納入了版本管理中,則修改.gitignore是無效的伸眶。所以一定要養(yǎng)成在項目開始就創(chuàng)建.gitignore文件的習慣惊窖。

刪除track的文件 (已經(jīng)commit的文件)
git rm 要忽略的文件
git commit -a -m "刪除不需要的文件"
在.gitignore文件中添加忽略規(guī)則

有些時候界酒,你想添加一個文件到Git,但發(fā)現(xiàn)添加不了毁欣,原因是這個文件被.gitignore忽略了:可以用-f強制添加到Git:git add -f App.class

或者你發(fā)現(xiàn),可能是.gitignore寫得有問題岳掐,需要找出來到底哪個規(guī)則寫錯了,可以用git check-ignore命令檢查:
git check-ignore -v App.class
.gitignore:3:*.class App.class
Git會告訴我們串述,.gitignore的第3行規(guī)則忽略了該文件哭尝,于是我們就可以知道應(yīng)該修訂哪個規(guī)則。

glob模式
所謂的 glob 模式是指 shell 所使用的簡化了的正則表達式剖煌,匹配規(guī)則如下:
"*":星號匹配零個或多個任意字符
[]:匹配任何一個列在方括號中的字符,如[ab]匹配a或者匹配b
"?":問號匹配一個任意字符
[n-m]:匹配所有在這兩個字符范圍內(nèi)的字符逝淹,如[0-9]表示匹配所有0到9的數(shù)字

匹配示例
logs/:忽略當前路徑下的logs目錄耕姊,包含logs下的所有子目錄和文件
/logs.txt:忽略根目錄下的logs.txt文件
*.class:忽略所有后綴為.class的文件
!/classes/a.class:不忽略classes目錄下的a.class文件
tmp/*.txt:只忽略tmp目錄下的.txt文件
**/foo:可以忽略/foo, a/foo, a/b/foo等

命令簡寫

很多人都用co表示checkout,ci表示commit栅葡,br表示branch:

git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch

--global參數(shù)是全局參數(shù)茉兰,也就是這些命令在這臺電腦的所有Git倉庫下都有用。

我們知道欣簇,命令git reset HEAD file可以把暫存區(qū)的修改撤銷掉(unstage)规脸,重新放回工作區(qū)。既然是一個unstage操作熊咽,就可以配置一個unstage別名:git config --global alias.unstage 'reset HEAD'

配置一個git last莫鸭,讓其顯示最后一次提交信息:git config --global alias.last 'log -1'

甚至還有人喪心病狂地把lg配置成了:git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

而當前用戶的Git配置文件放在用戶主目錄下的一個隱藏文件.gitconfig中:

cat .gitconfig

[alias]
co = checkout ci = commit br = branch st = status [user] name = Your Name email = your@email.com

配置別名也可以直接修改這個文件,如果改錯了横殴,可以刪掉文件重新通過命令配置被因。

搭建一臺Git服務(wù)器作為私有倉庫使用。

推薦用Ubuntu或Debian,這樣梨与,通過幾條簡單的apt命令就可以完成安裝堕花。假設(shè)你已經(jīng)有sudo權(quán)限的用戶賬號,下面粥鞋,正式開始安裝缘挽。
第一步,安裝git:
````sudo apt-get install git第二步呻粹,創(chuàng)建一個git用戶壕曼,用來運行g(shù)it服務(wù):sudo adduser git第三步,創(chuàng)建證書登錄: 收集所有需要登錄的用戶的公鑰尚猿,就是他們自己的id_rsa.pub文件窝稿,把所有公鑰導(dǎo)入到/home/git/.ssh/authorized_keys文件里,一行一個凿掂。 第四步伴榔,初始化Git倉庫: 先選定一個目錄作為Git倉庫,假定是/srv/sample.git踪少,在/srv目錄下輸入命令:sudo git init --bare sample.gitGit就會創(chuàng)建一個裸倉庫援奢,裸倉庫沒有工作區(qū)集漾,因為服務(wù)器上的Git倉庫純粹是為了共享具篇,所以不讓用戶直接登錄到服務(wù)器上去改工作區(qū)驱显,并且服務(wù)器上的Git倉庫通常都以.git結(jié)尾埃疫。然后栓霜,把owner改為git:sudo chown -R git:git sample.git第五步,禁用shell登錄: 出于安全考慮叙淌,第二步創(chuàng)建的git用戶不允許登錄shell闻鉴,這可以通過編輯/etc/passwd文件完成孟岛。找到類似下面的一行: git:x:1001:1001:,,,:/home/git:/bin/bash 改為: git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell 這樣渠羞,git用戶可以正常通過ssh使用git次询,但無法登錄shell屯吊,因為我們?yōu)間it用戶指定的git-shell每次一登錄就自動退出盒卸。 第六步蔽介,克隆遠程倉庫: 現(xiàn)在虹蓄,可以通過git clone命令克隆遠程倉庫了薇组,在各自的電腦上運行:git clone git@server:/srv/sample.git Cloning into 'sample'... warning: You appear to have cloned an empty repository.```
剩下的推送就簡單了。

管理公鑰

如果團隊很小挑童,把每個人的公鑰收集起來放到服務(wù)器的/home/git/.ssh/authorized_keys文件里就是可行的站叼。如果團隊有幾百號人尽楔,就沒法這么玩了,這時玛荞,可以用Gitosis來管理公鑰勋眯。

這里我們不介紹怎么玩Gitosis了客蹋,幾百號人的團隊基本都在500強了讶坯,相信找個高水平的Linux管理員問題不大辆琅。

管理權(quán)限

有很多不但視源代碼如生命涎跨,而且視員工為竊賊的公司隅很,會在版本控制系統(tǒng)里設(shè)置一套完善的權(quán)限控制率碾,每個人是否有讀寫權(quán)限會精確到每個分支甚至每個目錄下所宰。因為Git是為Linux源代碼托管而開發(fā)的仔粥,所以Git也繼承了開源社區(qū)的精神躯泰,不支持權(quán)限控制麦向。不過诵竭,因為Git支持鉤子(hook),所以沙郭,可以在服務(wù)器端編寫一系列腳本來控制提交等操作棠绘,達到權(quán)限控制的目的氧苍。Gitolite就是這個工具让虐。

這里我們也不介紹Gitolite了赡突,不要把有限的生命浪費到權(quán)限斗爭中惭缰。

小結(jié)

搭建Git服務(wù)器非常簡單漱受,通常10分鐘即可完成;

要方便管理公鑰絮记,用Gitosis怨愤;

要像SVN那樣變態(tài)地控制權(quán)限撰洗,用Gitolite

   如何參與一個開源項目呢差导?比如人氣極高的bootstrap項目柿汛,這是一個非常強大的CSS框架络断,你可以訪問它的項目主頁https://github.com/twbs/bootstrap项玛,點“Fork”就在自己的賬號下克隆了一個bootstrap倉庫襟沮,然后开伏,從自己的賬號下clone:

git clone git@github.com:michaelliao/bootstrap.git

一定要從自己的賬號下clone倉庫固灵,這樣你才能推送修改。如果從bootstrap的作者的倉庫地址git@github.com:twbs/bootstrap.git克隆丛忆,因為沒有權(quán)限熄诡,你將不能推送修改凰浮。

如果你想修復(fù)bootstrap的一個bug姜骡,或者新增一個功能,立刻就可以開始干活惫周,干完后康栈,往自己的倉庫推送啥么。

如果你希望bootstrap的官方庫能接受你的修改菠秒,你就可以在GitHub上發(fā)起一個pull request践叠。當然管挟,對方是否接受你的pull request就不一定了弄捕。

如果你沒能力修改bootstrap守谓,但又想要試一把pull request斋荞,那就Fork一下我的倉庫:https://github.com/michaelliao/learngit譬猫,創(chuàng)建一個your-github-id.txt的文本文件,寫點自己學習Git的心得别洪,然后推送一個pull request給我挖垛,我會視心情而定是否接受痢毒。    

使用碼云和使用GitHub類似哪替,我們在碼云上注冊賬號并登錄后凭舶,需要先上傳自己的SSH公鑰帅霜。選擇右上角用戶頭像 -> 菜單“修改資料”身冀,然后選擇“SSH公鑰”搂根,填寫一個便于識別的標題,然后把用戶主目錄下的.ssh/id_rsa.pub文件的內(nèi)容粘貼進去:  如果我們已經(jīng)有了一個本地的git倉庫(例如,一個名為learngit的本地庫)隙咸,如何把它關(guān)聯(lián)到碼云的遠程庫上呢五督? 首先瓶殃,我們在碼云上創(chuàng)建一個新的項目遥椿,選擇右上角用戶頭像 -> 菜單“控制面板”冠场,然后點擊“創(chuàng)建項目”: 項目名稱最好與本地庫保持一致:

然后碴裙,我們在本地庫上使用命令git remote add把它和碼云的遠程庫關(guān)聯(lián):git remote add origin git@gitee.com:liaoxuefeng/learngit.git

之后舔株,就可以正常地用git push和git pull推送了载慈!

如果在使用命令git remote add時報錯:git remote add origin git@gitee.com:liaoxuefeng/learngit.git fatal: remote origin already exists.

這說明本地庫已經(jīng)關(guān)聯(lián)了一個名叫origin的遠程庫办铡,此時料扰,可以先用git remote -v查看遠程庫信息:

git remote -v 可以看到嫂伞,本地庫已經(jīng)關(guān)聯(lián)了origin的遠程庫,并且撰豺,該遠程庫指向GitHub污桦。

我們可以刪除已有的GitHub遠程庫:git remote rm origin

再關(guān)聯(lián)碼云的遠程庫(注意路徑中需要填寫正確的用戶名):git remote add origin git@gitee.com:liaoxuefeng/learngit.git

現(xiàn)在可以看到,origin已經(jīng)被關(guān)聯(lián)到碼云的遠程庫了亭姥。通過git push命令就可以把本地庫推送到Gitee上坝撑。

因為git本身是分布式版本控制系統(tǒng)粮揉,可以同步到另外一個遠程庫击儡,當然也可以同步到另外兩個遠程庫。

使用多個遠程庫時阳谍,我們要注意,git給遠程庫起的默認名稱是origin训貌,如果有多個遠程庫递沪,我們需要用不同的名稱來標識不同的遠程庫款慨。

仍然以learngit本地庫為例檩奠,我們先刪除已關(guān)聯(lián)的名為origin的遠程庫:git remote rm origin

然后埠戳,先關(guān)聯(lián)GitHub的遠程庫:git remote add github git@github.com:michaelliao/learngit.git

注意,遠程庫的名稱叫g(shù)ithub颗圣,不叫origin了屁使。

接著在岂,再關(guān)聯(lián)碼云的遠程庫:git remote add gitee git@gitee.com:liaoxuefeng/learngit.git

同樣注意,遠程庫的名稱叫g(shù)itee屋灌,不叫origin。

現(xiàn)在应狱,我們用git remote -v查看遠程庫信息共郭,可以看到兩個遠程庫:

如果要推送到GitHub,使用命令:git push github master

如果要推送到碼云疾呻,使用命令:git push gitee master

碼云也同樣提供了Pull request功能除嘹,可以讓其他小伙伴參與到開源項目中來。你可以通過Fork我的倉庫:https://gitee.com/liaoxuefeng/learngit岸蜗,創(chuàng)建一個your-gitee-id.txt的文本文件,

寫點自己學習Git的心得,然后推送一個pull request給我,這個倉庫會在碼云和GitHub做雙向同步扒腕。

 git錯誤:unable to auto-detect email address

找到工程目錄 (Project) 的.git文件夾居灯,打開之后找到config文件,在最后邊加上一句話

[user]

email=your email

name=your name

顯示當前的git配置 git config --list

編輯git配置文件 git config -e [--global]

提交暫存區(qū)的指定文件到倉庫區(qū) git commit [file] -m”message”

提交工作區(qū)自上次commit之后的變化,直接到倉庫區(qū) git commit -a

提交時顯示所有diff信息 git commit -v

使用一次新的commit,代替上一次提交如果代碼沒有變化則用來改寫上一次commit的提交信息 git commit --amend -m”message”

重做上一次commit,包括指定文件的新變化 git commit --amend [file]

顯示所有本地分支 git branch

列出所有遠程分支 git branch -r

列出所有本地分支和遠程分支 git branch -a

新建一個分支,但依然停留就在當前分支 git branch [branch-name]

新建一個分支,與指定的遠程分支建立追蹤關(guān)系 git branch --track [branch] [remote-branch]

刪除分支 git branch -d [branch-name]

刪除遠程分支 git push origin --delete [branch]

           Git branch -dr [remote/branch]

新建一個分支并切換到該分支 git checkout -b [branch]

切換到指定分支并更新工作區(qū) git checkout [branch-name]

切換到上一個分支git checkout -

在現(xiàn)有分支與指定分支之間建立追蹤關(guān)系 git branch --set-upstream [branch] [remote-branch]

合并制定分支到當前分支 git merge [branch]

衍合指定分支到當前分支 git rebase [branch]

選擇一個commit,合并進當前分支 git cheery-pick [commit]

列出所有本地標簽 git tag

基于最新提交創(chuàng)建標簽 git tag [tagname]

刪除標簽 git tag -d [tagname]

刪除遠程標簽 git push origin :refs/tags/tagname

查看標簽信息 git show [tagname]

提交指定標簽 git push [remote] [tag]

提交所有標簽 git push [remote] --tags

新建一個分支,指向某個標簽 git checkout -b [branchname] [tagname]

顯示有變更的文件 git status

顯示當前分支的版本歷史 git log

顯示commit歷史,以及每次commit發(fā)生變更的文件 git log --stat

根據(jù)關(guān)鍵詞搜索提交歷史 git log -s keyword

顯示某個提交后的所有變動,每個提交占據(jù)一行 git log tagname HEAD --pretty=format:%s

顯示某個提交之后的所有變動,其提交說明必須符合搜索條件 git log tagname HEAD --grep feature

顯示某個文件的版本歷史,包括文件改名 git log --follow filename

                                 Git whatchanged filename

顯示指定文件相關(guān)的每一次diff git log -p filename

顯示過去5次提交 git log -5 --pretty --oneline

顯示所有提交過的用戶,按提交次數(shù)排序 git shortlog -sn

顯示指定文件是什么人在什么時間修改過 git blame filename

顯示暫存區(qū)和工作區(qū)的差異 git diff

顯示暫存區(qū)和上一個提交的差異 git diff --cached filename

顯示兩次提交之間的差異 git diff firstbranch secondbranch

顯示工作區(qū)與當前分支最新提交之間的差異 git diff HEAD

顯示今天你寫了多少行代碼 git diff --shortstat “@{0 day ago}”

顯示某次提交的元數(shù)據(jù)和內(nèi)容變化 git show commitid

顯示某次提交發(fā)生變化的文件 git show --name-only commitid

顯示某次提交時,某個文件的內(nèi)容 git show commitid:filename

顯示當前分支的最近幾次提交 git reflog

下載遠程倉庫的所有變動 git fetch [remote]

取回遠程倉庫的變化,并與本地分支合并 git pull [remote] [branch]

顯示所有遠程倉庫 git remote -v

顯示某個遠程倉庫的信息 git remote show [remote]

增加一個新的遠程倉庫并命名 git remote add [shortname] [url]

上傳本地指定分支到遠程倉庫 git push [remote] [branch]

強行推送當前分支到遠程倉庫,即使有沖突 git push [remote] --force

推送所有分支到遠程倉庫 git push [remote] --all

刪除遠程分支或標簽 git push [remote] :branchname/tagname

上傳所有標簽 git push --tags

撤銷工作目錄中所有未提交文件的修改內(nèi)容 git reset --hard HEAD

撤銷指定的未提交文件的修改內(nèi)容 git checkout HEAD filename

撤銷指定的提交 git revert commitid

退回到一天之前的版本 git log --before=”1 days”

恢復(fù)暫存區(qū)的指定文件到工作區(qū) git checkout filename

恢復(fù)某個提交的指定文件到暫存區(qū)和工作區(qū) git checkout commitid filename

恢復(fù)暫存區(qū)的所有文件到工作區(qū) git checkout .

重置暫存區(qū)的指定文件,與上一次提交保持一致,但工作區(qū)不變 git reset filename

重置暫存區(qū)與工作區(qū),與上一次提交保持一致 git reset --hard

重置當前分支的指針為指定提交,同時重置暫存區(qū),但工作區(qū)不變 git reset commitid

重置當前分支的HEAD為指定提交,同時重置暫存區(qū)和工作區(qū),與指定提交一致 git reset --hard commitid

重置當前HEAD 為指定提交,但保持暫存區(qū)和工作區(qū)不變 git reset --keep commitid

新建一個提交用來撤銷指定提交后者的所有變化都將被前者抵消,并且應(yīng)用到當前分支 git revert commitid

暫時將未提交的變化移除,稍后再移入 git stash git stash pop

生成一個可共發(fā)布的壓縮包 git archive

修改提交注釋

git commit -v --amend

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末变屁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蛔垢,更是在濱河造成了極大的恐慌鹏漆,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秒梳,死亡現(xiàn)場離奇詭異,居然都是意外死亡枕屉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拨与,“玉大人荚斯,你說我怎么就攤上這事胁孙〉嗥鳎” “怎么了肪康?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵绞愚,是天一觀的道長筷弦。 經(jīng)常有香客問我润绵,道長戚啥,這世上最難降的妖魔是什么盆繁? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上合是,老公的妹妹穿的比我還像新娘撩鹿。我一直安慰自己,他們只是感情好墓贿,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布茧泪。 她就那樣靜靜地躺著,像睡著了一般聋袋。 火紅的嫁衣襯著肌膚如雪队伟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天幽勒,我揣著相機與錄音嗜侮,去河邊找鬼。 笑死啥容,一個胖子當著我的面吹牛锈颗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播咪惠,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼宜猜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了硝逢?” 一聲冷哼從身側(cè)響起姨拥,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎渠鸽,沒想到半個月后叫乌,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡徽缚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年憨奸,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凿试。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡排宰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出那婉,到底是詐尸還是另有隱情板甘,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布详炬,位于F島的核電站盐类,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜在跳,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一枪萄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧猫妙,春花似錦人乓、人聲如沸图贸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至韭脊,卻和暖如春童谒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背沪羔。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工饥伊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蔫饰。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓琅豆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親篓吁。 傳聞我的和親對象是個殘疾皇子茫因,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355