[轉(zhuǎn)載自紅超的吾記之談的博客]Git 使用備忘

1.參與一個(gè)開(kāi)源項(xiàng)目,一定要從自己的帳號(hào)下克隆版本庫(kù),這樣你才能推送修改!

2.Repository 版本庫(kù),又名倉(cāng)庫(kù):

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

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

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

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

可選設(shè)置:

$git config --global color.ui auto<-- 讓Git顯示顏色,會(huì)讓命令輸出看起來(lái)更醒目

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

注:加上 --global 是針對(duì)當(dāng)前用戶起作用的,不加那只針對(duì)當(dāng)前的版本庫(kù)起作用。

每個(gè) Git 版本庫(kù)的配置信息都放在 .git 下的 config 文件中。

當(dāng)前用戶的 Git 配置文件放在當(dāng)前用戶主目錄下的一個(gè) .gitconfig 隱藏文件中。

4.創(chuàng)建一個(gè)版本庫(kù):

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

注:全路徑中不要含中文,以免出問(wèn)題!

2) 進(jìn)入目錄且初始化成版本庫(kù):

$ cd MyProject

$ git init

注:在目錄中創(chuàng)建了一個(gè) .git 隱藏目錄來(lái)管理版本庫(kù)。

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

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

$ git add 文件名

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

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

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

$git commit -m "提交說(shuō)明信息"

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

創(chuàng)建 Git 版本庫(kù)時(shí),Git 自動(dòng)為我們創(chuàng)建了唯一一個(gè) master 分支。

完成了一定的修改后,就應(yīng)用 git commit 提交一次,以便之后修改失誤時(shí)回退。

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

$ git status

.忽略特殊文件:

某些文件必須放到版本庫(kù)中,但又不能提交它們,如:調(diào)試日志文件。

每次 git status 都會(huì)提示 “Untracked files ...”

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

然后把要忽略的文件名填進(jìn)去,Git就會(huì)自動(dòng)忽略這些文件。

注:Windows 資源管理器中新建 .gitignore 文件時(shí),會(huì)提示輸入文件名,

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

格式參見(jiàn)有用的 .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 也提交到版本庫(kù)中??!

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

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

$ git diff

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

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

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

$ git log --pretty=oneline<-- 每行一條提交記錄,且僅顯示[版本號(hào)]和[提交說(shuō)明]

注:由近及遠(yuǎn)的顯示提交記錄。

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

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

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

$ git reset HEAD

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

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

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

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

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

$ git reset 當(dāng)前分支版本號(hào)

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

$ git reflog

注:輸出信息中包含[版本號(hào)][操作類型][操作描述]。

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

$ git last

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

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

注:在資源/文件管理器中誤刪除指定文件后可恢復(fù)。

注:-- 很重要,沒(méi)有 --,就變成了切換到指定分支的命令。

注意以下兩種情況:

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

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

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

$ git checkout -b <本地新分支名> <遠(yuǎn)程主機(jī)名>/<遠(yuǎn)程分支名>

注:用 git checkout -b 命令在<遠(yuǎn)程主機(jī)名>/<遠(yuǎn)程分支名>的基礎(chǔ)上,

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

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

等同于

$ git branch <本地新分支名>

$ git checkout <本地新分支名>

注:在本地當(dāng)前分支的基礎(chǔ)上,創(chuàng)建本地新分支并將其切換為本地當(dāng)前分支。

用 git branch 命令查看所有分支,當(dāng)前分支前面會(huì)標(biāo)一個(gè)*號(hào)。

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

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

$ git rm 文件名

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

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

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

注:Windows 下打開(kāi) Git Bash 。

當(dāng)前用戶目錄里找到 .ssh 目錄,里面有 id_rsa 和 id_rsa.pub 兩個(gè)文件,

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

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

F.用 git remote 命令列出所有遠(yuǎn)程主機(jī):

$ git remote

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

注:為了便于管理,Git 要求每個(gè)遠(yuǎn)程主機(jī)都必須指定一個(gè)主機(jī)名。

克隆版本庫(kù)的時(shí)候,所使用的遠(yuǎn)程主機(jī)自動(dòng)被 Git 命名為 origin 。

如果想用其它的主機(jī)名,需要用 git clone 命令的 -o 選項(xiàng)指定。

1) 用 git remote rename <原主機(jī)名> <新主機(jī)名> 命令更改遠(yuǎn)程主機(jī)名。

2) 用 git remote rm <主機(jī)名> 命令于刪除遠(yuǎn)程主機(jī)。

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

G.用 git remote add 命令添加遠(yuǎn)程主機(jī):

$ git remote add 遠(yuǎn)程主機(jī)名 遠(yuǎn)程主機(jī)地址

GitHub:

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

bitbucket:

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

注:origin 是遠(yuǎn)程主機(jī)名,這是 Git 默認(rèn)的叫法,也可以改成別的。

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

$ git push <遠(yuǎn)程主機(jī)名> <本地分支名>:<遠(yuǎn)程分支名>

$ git push --all <遠(yuǎn)程主機(jī)名><-- 不管是否存在對(duì)應(yīng)的遠(yuǎn)程分支,將本地的所有分支都推送到遠(yuǎn)程主機(jī)

$ git push <遠(yuǎn)程主機(jī)名> :<遠(yuǎn)程分支名><-等同-> $ git push <遠(yuǎn)程主機(jī)名> --delete <遠(yuǎn)程分支名>

注:如果省略本地分支名,則表示刪除指定的遠(yuǎn)程分支,因?yàn)檫@等同于推送一個(gè)空的本地分支到遠(yuǎn)程分支。

$ git push -u <遠(yuǎn)程主機(jī)名> <本地分支名>

注:如果當(dāng)前分支與多個(gè)主機(jī)存在追蹤關(guān)系,則可以使用 -u 選項(xiàng)指定一個(gè)默認(rèn)主機(jī),

Git 不僅會(huì)把本地分支名內(nèi)容推送到遠(yuǎn)程主機(jī)上新建同名分支,

還會(huì)把本地分支和遠(yuǎn)程主機(jī)的同名分支關(guān)聯(lián)起來(lái),

這樣接下來(lái)就可以用 git push <遠(yuǎn)程主機(jī)名> 命令。

如果當(dāng)前分支只有一個(gè)追蹤分支,那么主機(jī)名都可以省略,用 git push 命令。

$ git push --force <遠(yuǎn)程主機(jī)名>

注:如果遠(yuǎn)程主機(jī)的版本比本地版本更新,推送時(shí)Git會(huì)報(bào)錯(cuò),

要求先在本地做git pull合并差異,然后再推送到遠(yuǎn)程主機(jī)。

使用 --force 選項(xiàng),會(huì)導(dǎo)致遠(yuǎn)程主機(jī)上更新的版本被覆蓋。

$ git push <遠(yuǎn)程主機(jī)名> --tags

注:使用 --tags 選項(xiàng)推送標(biāo)簽。

I.用 git clone 命令從遠(yuǎn)程主機(jī)克隆一個(gè)版本庫(kù):

$ git clone <版本庫(kù)的地址><-- 在本地主機(jī)生成一個(gè)目錄,與遠(yuǎn)程主機(jī)的版本庫(kù)同名

$ git clone <版本庫(kù)的地址> <本地目錄名> <-- 在本地主機(jī)生成一個(gè)指定的目錄名

注:版本庫(kù)的地址支持 HTTP(S)、SSH、Git、本地文件協(xié)議等。

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

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

執(zhí)行 git clone 成功后,所有本地分支默認(rèn)與遠(yuǎn)程主機(jī)的同名分支,建立追蹤關(guān)系。

J.用 git fetch 命令將遠(yuǎn)程主機(jī)的更新取回本地:

$ git fetch <遠(yuǎn)程主機(jī)名><-- 將指定遠(yuǎn)程主機(jī)的全部更新到本地

$ git fetch <遠(yuǎn)程主機(jī)名> <遠(yuǎn)程分支名><-- 將指定遠(yuǎn)程主機(jī)的指定分支更新到本地

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

$ git merge <遠(yuǎn)程主機(jī)名>/<遠(yuǎn)程分支名>

$ git rebase <遠(yuǎn)程主機(jī)名>/<遠(yuǎn)程分支名>

注:在當(dāng)前分支上,合并<遠(yuǎn)程主機(jī)名>/<遠(yuǎn)程分支名>。

L.用 git pull 命令取回遠(yuǎn)程主機(jī)上某個(gè)分支的更新,再與本地的指定分支合并:

$ git pull <遠(yuǎn)程主機(jī)名> <遠(yuǎn)程分支名>:<本地分支名>

注:用 git branch --set-upstream <本地分支名> <遠(yuǎn)程主機(jī)名>/<遠(yuǎn)程分支名> 命令,

來(lái)手動(dòng)建立追蹤關(guān)系。

當(dāng)前分支與遠(yuǎn)程分支建立了追蹤關(guān)系,就可以省略 <本地分支名>:<遠(yuǎn)程分支名>,

用 git pull <遠(yuǎn)程主機(jī)名> 命令取回更新再合并。

如果當(dāng)前分支只有一個(gè)追蹤分支,連遠(yuǎn)程主機(jī)名都可以省略,

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

$ git pull <遠(yuǎn)程主機(jī)名> <遠(yuǎn)程分支名>

注:上面這個(gè)命令表示,取回指定遠(yuǎn)程主機(jī)的指定分支,再與當(dāng)前分支合并,

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

$ git fetch <遠(yuǎn)程主機(jī)名>

$ git merge <遠(yuǎn)程主機(jī)名>/<遠(yuǎn)程分支名>

M.用 git merge 命令合并指定分支到當(dāng)前分支:

$ git merge <本地指定分支名> 或 <遠(yuǎn)程主機(jī)名>/<遠(yuǎn)程分支名>

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

<<<<<<< HEAD

合并時(shí)有沖突的當(dāng)前分支內(nèi)容

=======

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

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

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

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

Git 使用 Fast forward 模式后,刪除分支后,會(huì)丟掉分支信息。

要強(qiáng)制禁用 Fast forward 模式,Git就會(huì)在合并時(shí)生成一個(gè)新的提交,

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

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

$ git branch -r<-- 命令查看遠(yuǎn)程分支

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

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

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

注:因?yàn)閯?chuàng)建、合并和刪除分支非??欤?Git 鼓勵(lì)你使用分支完成某個(gè)任務(wù),

這和直接在主分支上工作效果是一樣的,但過(guò)程更安全。

Git 分支十分強(qiáng)大,在團(tuán)隊(duì)開(kāi)發(fā)中應(yīng)該充分應(yīng)用。

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

注:新分支還沒(méi)有合并過(guò),需要強(qiáng)行刪除使用 -D 參數(shù)。

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

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

$ git stash

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

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

等同于

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

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

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

P.用 git tag 命令查看標(biāo)簽:

$ git tag<-- 查看標(biāo)簽

注:標(biāo)簽不是按打標(biāo)簽的時(shí)間順序列出,而是按標(biāo)簽名字母排序的。

$ git tag <標(biāo)簽名><-- 打標(biāo)簽

$ git tag <標(biāo)簽名> [版本號(hào)] <-- 對(duì)指定版本號(hào)打標(biāo)簽

$ git tag -a <標(biāo)簽名> -m "標(biāo)簽說(shuō)明信息" [版本號(hào)]<-- -a 參數(shù)指出標(biāo)簽名,-m 參數(shù)指出說(shuō)明信息

注:首先切換到需要打標(biāo)簽的分支上,再打標(biāo)簽。

$ git show <標(biāo)簽名><-- 查看標(biāo)簽信息

$ git tag -d <標(biāo)簽名><-- 刪除指定的標(biāo)簽

$ git push <遠(yuǎn)程主機(jī)名> <標(biāo)簽名><-- 推送指定標(biāo)簽到指定遠(yuǎn)程主機(jī)

$ git push origin --tags<-- 一次性推送全部尚未推送到遠(yuǎn)程的本地標(biāo)簽

注如果標(biāo)簽已經(jīng)推送到遠(yuǎn)程,要?jiǎng)h除遠(yuǎn)程標(biāo)簽,就要先從本地刪除,然后從遠(yuǎn)程刪除:

$ git tag -d <標(biāo)簽名>

$ git push origin :refs/tags/<標(biāo)簽名>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容