[轉載自紅超的吾記之談的博客]Git 使用備忘

1.參與一個開源項目承耿,一定要從自己的帳號下克隆版本庫冠骄,這樣你才能推送修改!

2.Repository 版本庫加袋,又名倉庫:

可以簡單地理解為一個目錄凛辣,且目錄下的所有文本文件可被 Git 管理(建議用 UTF8 編碼)。

3.用 git config 命令的 --global 參數(shù)职烧,表示你機器上所有的 Git 版本庫都會使用這個配置:

$ git config --global user.name"你的名字"

$ git config --global user.email "你的郵箱"

可選設置:

$git config --global color.ui auto<-- 讓Git顯示顏色扁誓,會讓命令輸出看起來更醒目

$ git config --global alias.縮寫后的命令別名 原命令名

注:加上 --global 是針對當前用戶起作用的防泵,不加那只針對當前的版本庫起作用。

每個 Git 版本庫的配置信息都放在 .git 下的 config 文件中蝗敢。

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

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

1) 在你喜歡的路徑下新建一個空目錄,如:$ mkdir MyProject

注:全路徑中不要含中文寿谴,以免出問題锁右!

2) 進入目錄且初始化成版本庫:

$ cd MyProject

$ git init

注:在目錄中創(chuàng)建了一個 .git 隱藏目錄來管理版本庫。

5.把提交新的或變更的文件到版本庫中:

1) 用 git add 命令添加要提交的文件:

$ git add 文件名

注:把新添的或修改的文件添加到暫存區(qū)(stage)拭卿。

在提交前骡湖,建議用 git status 命令查看一下各文件的狀態(tài)。

2) 用 git commit 命令提交全部要提交的文件:

$git commit -m "提交說明信息"

注:把暫存區(qū)的所有內(nèi)容提交到當前分支峻厚。

創(chuàng)建 Git 版本庫時,Git 自動為我們創(chuàng)建了唯一一個 master 分支谆焊。

完成了一定的修改后惠桃,就應用 git commit 提交一次,以便之后修改失誤時回退辖试。

6.用 git status 命令查看版本庫當前的狀態(tài):

$ git status

.忽略特殊文件:

某些文件必須放到版本庫中辜王,但又不能提交它們,如:調試日志文件罐孝。

每次 git status 都會提示 “Untracked files ...”

在版本庫的根目錄下創(chuàng)建一個特殊的文件:.gitignore 呐馆,

然后把要忽略的文件名填進去,Git就會自動忽略這些文件莲兢。

注:Windows 資源管理器中新建 .gitignore 文件時汹来,會提示輸入文件名,

所以用文本編輯器(如:Notepad++)來生成 .gitignore 文件改艇。

格式參見有用的 .gitignore 模板集:https://github.com/github/gitignore

以 Android.gitignore 舉例:

# Built application files

*.apk

*.ap_

# Files for the Dalvik VM

*.dex

# Java class files

*.class

# Generated files

bin/

gen/

# Gradle files

.gradle/

build/

# Local configuration file (sdk path, etc)

local.properties

# Proguard folder generated by Eclipse

proguard/

# Log Files

*.log

注:別忘了把 .gitignore 也提交到版本庫中笆瞻唷!

檢驗 .gitignore 文件是否合格的方法就是執(zhí)行 git status 命令谒兄。

7.用 git diff 命令查看最后修改的內(nèi)容:

$ git diff

$ git diff HEAD -- 文件名<-- 查看指定文件在工作區(qū)和版本庫里面最新版本的區(qū)別

8.用 git log 命令查看歷史記錄:

$ git log<-- 提交信息完整顯示

$ git log --pretty=oneline<-- 每行一條提交記錄摔桦,且僅顯示[版本號]和[提交說明]

注:由近及遠的顯示提交記錄。

輸出信息中的 commit 后面跟的散列值(SHA1)就是版本號承疲。

9.用 git reset 命令可以回退到指定版本:

1) HEAD - 當前分支上一次提交的版本

$ git reset HEAD

$ git reset HEAD 文件名<-- 把暫存區(qū)的修改撤銷掉(unstage)邻耕,重新放回工作區(qū)

2) HEAD^ - 當前分支上上一次提交的版本

3) HEAD^^ - 當前分支倒退三次提交的版本

4) HEAD~數(shù)字 - 當前分支倒退 n 次提交的版本

5) 指定當前分支版本號(有前七位就夠了,Git 有的輸出信息也僅輸出七位分支版號)

$ git reset 當前分支版本號

A.用 git reflog 命令查看操作記錄:

$ git reflog

注:輸出信息中包含[版本號][操作類型][操作描述]燕鸽。

B.用 git last 命令顯示最后一次的提交內(nèi)容:

$ git last

C.用 git checkout 命令切換分支:

$ git checkout -- 文件名<-- 把指定文件在工作區(qū)的修改全部撤銷

注:在資源/文件管理器中誤刪除指定文件后可恢復兄世。

注:-- 很重要,沒有 --绵咱,就變成了切換到指定分支的命令碘饼。

注意以下兩種情況:

1) 文件自修改后還沒有被放到暫存區(qū)熙兔,撤銷修改就回到了和版本庫里面最新版本一樣的狀態(tài);

2) 文件修改后并且已經(jīng)添加到暫存區(qū)艾恼,再作修改住涉,撤銷修改后就和暫存區(qū)的版本一樣的狀態(tài);

即讓文件回到最后一次 git add 或 git commit 時的狀態(tài)钠绍。

$ git checkout -b <本地新分支名> <遠程主機名>/<遠程分支名>

注:用 git checkout -b 命令在<遠程主機名>/<遠程分支名>的基礎上舆声,

創(chuàng)建一個本地新分支并切換為當前分支。

$ git checkout -b <本地新分支名>

等同于

$ git branch <本地新分支名>

$ git checkout <本地新分支名>

注:在本地當前分支的基礎上柳爽,創(chuàng)建本地新分支并將其切換為本地當前分支媳握。

用 git branch 命令查看所有分支,當前分支前面會標一個*號磷脯。

$ git checkout <本地分支名><-- 切換到指定本地分支

D.用 git rm 命令刪除文件:

$ git rm 文件名

注:執(zhí)行 git commit 命令后文件就從版本庫中被刪除了蛾找。

E.創(chuàng)建 SSH Key :

$ ssh-keygen -t rsa -C 電子郵箱名

注:Windows 下打開 Git Bash 。

當前用戶目錄里找到 .ssh 目錄赵誓,里面有 id_rsa 和 id_rsa.pub 兩個文件打毛,

id_rsa- 私鑰,不能泄露出去俩功,

id_rsa.pub - 公鑰幻枉,可以發(fā)給別人。

F.用 git remote 命令列出所有遠程主機:

$ git remote

$ git remote -v<-- 可以查看遠程主機的網(wǎng)址

注:為了便于管理诡蜓,Git 要求每個遠程主機都必須指定一個主機名熬甫。

克隆版本庫的時候,所使用的遠程主機自動被 Git 命名為 origin 蔓罚。

如果想用其它的主機名椿肩,需要用 git clone 命令的 -o 選項指定。

1) 用 git remote rename <原主機名> <新主機名> 命令更改遠程主機名脚粟。

2) 用 git remote rm <主機名> 命令于刪除遠程主機覆旱。

3) 用 git remote show <主機名> 命令查看該主機的詳細信息。

G.用 git remote add 命令添加遠程主機:

$ git remote add 遠程主機名 遠程主機地址

GitHub:

$ git remote add origin git@github.com:帳戶名/版本庫名.git

bitbucket:

$ git remote add origin git@bitbucket.org:帳戶名/版本庫名.git

注:origin 是遠程主機名核无,這是 Git 默認的叫法扣唱,也可以改成別的。

H.用 git push 命令把本地庫的所有內(nèi)容推送到遠程庫上:

$ git push <遠程主機名> <本地分支名>:<遠程分支名>

$ git push --all <遠程主機名><-- 不管是否存在對應的遠程分支团南,將本地的所有分支都推送到遠程主機

$ git push <遠程主機名> :<遠程分支名><-等同-> $ git push <遠程主機名> --delete <遠程分支名>

注:如果省略本地分支名噪沙,則表示刪除指定的遠程分支,因為這等同于推送一個空的本地分支到遠程分支吐根。

$ git push -u <遠程主機名> <本地分支名>

注:如果當前分支與多個主機存在追蹤關系正歼,則可以使用 -u 選項指定一個默認主機,

Git 不僅會把本地分支名內(nèi)容推送到遠程主機上新建同名分支拷橘,

還會把本地分支和遠程主機的同名分支關聯(lián)起來局义,

這樣接下來就可以用 git push <遠程主機名> 命令喜爷。

如果當前分支只有一個追蹤分支,那么主機名都可以省略萄唇,用 git push 命令檩帐。

$ git push --force <遠程主機名>

注:如果遠程主機的版本比本地版本更新,推送時Git會報錯另萤,

要求先在本地做git pull合并差異湃密,然后再推送到遠程主機。

使用 --force 選項四敞,會導致遠程主機上更新的版本被覆蓋泛源。

$ git push <遠程主機名> --tags

注:使用 --tags 選項推送標簽。

I.用 git clone 命令從遠程主機克隆一個版本庫:

$ git clone <版本庫的地址><-- 在本地主機生成一個目錄忿危,與遠程主機的版本庫同名

$ git clone <版本庫的地址> <本地目錄名> <-- 在本地主機生成一個指定的目錄名

注:版本庫的地址支持 HTTP(S)达箍、SSH、Git癌蚁、本地文件協(xié)議等幻梯。

使用 https 除了速度慢以外,還有個最大的麻煩是每次推送都必須輸入口令努释!

$ git clone [user@]域名:帳戶名/版本庫名.git<-- SSH 協(xié)議

執(zhí)行 git clone 成功后,所有本地分支默認與遠程主機的同名分支咬摇,建立追蹤關系伐蒂。

J.用 git fetch 命令將遠程主機的更新取回本地:

$ git fetch <遠程主機名><-- 將指定遠程主機的全部更新到本地

$ git fetch <遠程主機名> <遠程分支名><-- 將指定遠程主機的指定分支更新到本地

K.用 git merge 或 git rebase 命令在本地分支上合并遠程分支:

$ git merge <遠程主機名>/<遠程分支名>

$ git rebase <遠程主機名>/<遠程分支名>

注:在當前分支上,合并<遠程主機名>/<遠程分支名>肛鹏。

L.用 git pull 命令取回遠程主機上某個分支的更新逸邦,再與本地的指定分支合并:

$ git pull <遠程主機名> <遠程分支名>:<本地分支名>

注:用 git branch --set-upstream <本地分支名> <遠程主機名>/<遠程分支名> 命令崎弃,

來手動建立追蹤關系州丹。

當前分支與遠程分支建立了追蹤關系渺尘,就可以省略 <本地分支名>:<遠程分支名>拴曲,

用 git pull <遠程主機名> 命令取回更新再合并游沿。

如果當前分支只有一個追蹤分支访雪,連遠程主機名都可以省略缨伊,

用 git pull 命令取回更新再合并颅围。

$ git pull <遠程主機名> <遠程分支名>

注:上面這個命令表示皱卓,取回指定遠程主機的指定分支裹芝,再與當前分支合并,

等同于先執(zhí)行 git fetch 命令娜汁,再做 git merge 命令:

$ git fetch <遠程主機名>

$ git merge <遠程主機名>/<遠程分支名>

M.用 git merge 命令合并指定分支到當前分支:

$ git merge <本地指定分支名> 或 <遠程主機名>/<遠程分支名>

注 Git 用如下格式標記出沖突內(nèi)容:

<<<<<<< HEAD

合并時有沖突的當前分支內(nèi)容

=======

合并時有沖突的指定分支內(nèi)容

>>>>>>> 指定分支名

$ git merge --no-ff -m "合并說明信息" <本地分支名>

注:--no-ff 參數(shù)嫂易,表示禁用 Fast forward 模式。

Git 使用 Fast forward 模式后掐禁,刪除分支后怜械,會丟掉分支信息颅和。

要強制禁用 Fast forward 模式,Git就會在合并時生成一個新的提交缕允,

這樣刪除分支后也可以從分支歷史上看到分支信息峡扩。

N.用 git branch 命令管理分支:

$ git branch -r<-- 命令查看遠程分支

$ git branch -a<-- 命令查看所有分支

$ git branch <本地新分支名><-- 創(chuàng)建本地當前分支的新分支

$ git branch -d <本地分支名><-- 刪除本地指定的分支

注:因為創(chuàng)建、合并和刪除分支非匙瓢牛快有额,所以 Git 鼓勵你使用分支完成某個任務,

這和直接在主分支上工作效果是一樣的彼绷,但過程更安全巍佑。

Git 分支十分強大,在團隊開發(fā)中應該充分應用寄悯。

$ git branch -D <本地分支名>

注:新分支還沒有合并過萤衰,需要強行刪除使用 -D 參數(shù)。

$ git log --graph<-- 可以看到分支合并圖

O.用 git stash 命令存放當前工作現(xiàn)場:

$ git stash

$ git stash list<-- 查看存放的工作現(xiàn)場

$ git stash pop <-- 恢復并刪除存放的工作現(xiàn)場

等同于

$ git stash apply stash@{數(shù)字} <-- 恢復存放的指定工作現(xiàn)場

$ git stash drop stash@{數(shù)字} <-- 刪除存放的工作現(xiàn)場

注:如要僅有一個猜旬,則可省略 stash@{數(shù)字} 參數(shù)脆栋。

P.用 git tag 命令查看標簽:

$ git tag<-- 查看標簽

注:標簽不是按打標簽的時間順序列出,而是按標簽名字母排序的洒擦。

$ git tag <標簽名><-- 打標簽

$ git tag <標簽名> [版本號] <-- 對指定版本號打標簽

$ git tag -a <標簽名> -m "標簽說明信息" [版本號]<-- -a 參數(shù)指出標簽名椿争,-m 參數(shù)指出說明信息

注:首先切換到需要打標簽的分支上,再打標簽熟嫩。

$ git show <標簽名><-- 查看標簽信息

$ git tag -d <標簽名><-- 刪除指定的標簽

$ git push <遠程主機名> <標簽名><-- 推送指定標簽到指定遠程主機

$ git push origin --tags<-- 一次性推送全部尚未推送到遠程的本地標簽

注如果標簽已經(jīng)推送到遠程秦踪,要刪除遠程標簽,就要先從本地刪除掸茅,然后從遠程刪除:

$ git tag -d <標簽名>

$ git push origin :refs/tags/<標簽名>

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末椅邓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子昧狮,更是在濱河造成了極大的恐慌景馁,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逗鸣,死亡現(xiàn)場離奇詭異合住,居然都是意外死亡,警方通過查閱死者的電腦和手機慕购,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門聊疲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人沪悲,你說我怎么就攤上這事获洲。” “怎么了殿如?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵贡珊,是天一觀的道長最爬。 經(jīng)常有香客問我,道長门岔,這世上最難降的妖魔是什么爱致? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮寒随,結果婚禮上糠悯,老公的妹妹穿的比我還像新娘。我一直安慰自己妻往,他們只是感情好互艾,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著讯泣,像睡著了一般纫普。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上好渠,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天昨稼,我揣著相機與錄音,去河邊找鬼拳锚。 笑死假栓,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的霍掺。 我是一名探鬼主播但指,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼抗楔!你這毒婦竟也來了?” 一聲冷哼從身側響起拦坠,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤连躏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后贞滨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體入热,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年晓铆,在試婚紗的時候發(fā)現(xiàn)自己被綠了勺良。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡骄噪,死狀恐怖尚困,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情链蕊,我是刑警寧澤事甜,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布谬泌,位于F島的核電站,受9級特大地震影響逻谦,放射性物質發(fā)生泄漏掌实。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一邦马、第九天 我趴在偏房一處隱蔽的房頂上張望贱鼻。 院中可真熱鬧,春花似錦滋将、人聲如沸邻悬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拘悦。三九已至,卻和暖如春橱脸,著一層夾襖步出監(jiān)牢的瞬間础米,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工添诉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留屁桑,地道東北人。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓栏赴,卻偏偏與公主長得像蘑斧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子须眷,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

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