1.參與一個開源項目嗡综,一定要從自己的帳號下克隆版本庫乙帮,這樣你才能推送修改!
2.Repository 版本庫极景,又名倉庫:
可以簡單地理解為一個目錄察净,且目錄下的所有文本文件可被 Git 管理(建議用 UTF8 編碼)。
3.用 git config 命令的 --global 參數(shù)盼樟,表示你機器上所有的 Git 版本庫都會使用這個配置:
$ git config --global user.name "你的名字"
$ git config --global user.email "你的郵箱"
可選設(shè)置:
$ git config --global color.ui auto <-- 讓Git顯示顏色氢卡,會讓命令輸出看起來更醒目
$ git config --global alias.縮寫后的命令別名 原命令名
注:加上 --global 是針對當(dāng)前用戶起作用的,不加那只針對當(dāng)前的版本庫起作用晨缴。
每個 Git 版本庫的配置信息都放在 .git 下的 config 文件中译秦。
當(dāng)前用戶的 Git 配置文件放在當(dāng)前用戶主目錄下的一個 .gitconfig 隱藏文件中。
4.創(chuàng)建一個版本庫:
-
在你喜歡的路徑下新建一個空目錄击碗,如:$ mkdir MyProject
注:全路徑中不要含中文筑悴,以免出問題!
-
進入目錄且初始化成版本庫:
$ cd MyProject
$ git init注:在目錄中創(chuàng)建了一個 .git 隱藏目錄來管理版本庫稍途。
5.把提交新的或變更的文件到版本庫中:
-
用 git add 命令添加要提交的文件:
$ git add 文件名
注:把新添的或修改的文件添加到暫存區(qū)(stage)阁吝。
在提交前,建議用 git status 命令查看一下各文件的狀態(tài)械拍。- 用 git commit 命令提交全部要提交的文件:
$ git commit -m "提交說明信息"
注:把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支突勇。
創(chuàng)建 Git 版本庫時射沟,Git 自動為我們創(chuàng)建了唯一一個 master 分支。
完成了一定的修改后与境,就應(yīng)用 git commit 提交一次,以便之后修改失誤時回退猖吴。
6.用 git status 命令查看版本庫當(dāng)前的狀態(tài):
$ git status
.忽略特殊文件:
某些文件必須放到版本庫中摔刁,但又不能提交它們,如:調(diào)試日志文件海蔽。
每次 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 <-- 每行一條提交記錄哼凯,且僅顯示[版本號]和[提交說明]
注:由近及遠(yuǎn)的顯示提交記錄。
輸出信息中的 commit 后面跟的散列值(SHA1)就是版本號楚里。
9.用 git reset 命令可以回退到指定版本:
-
HEAD - 當(dāng)前分支上一次提交的版本
$ git reset HEAD
$ git reset HEAD 文件名 <-- 把暫存區(qū)的修改撤銷掉(unstage)断部,重新放回工作區(qū) HEAD^ - 當(dāng)前分支上上一次提交的版本
HEAD^^ - 當(dāng)前分支倒退三次提交的版本
HEAD~數(shù)字 - 當(dāng)前分支倒退 n 次提交的版本
-
指定當(dāng)前分支版本號(有前七位就夠了,Git 有的輸出信息也僅輸出七位分支版號)
$ git reset 當(dāng)前分支版本號
A.用 git reflog 命令查看操作記錄:
$ git reflog
注:輸出信息中包含[版本號][操作類型][操作描述]班缎。
B.用 git last 命令顯示最后一次的提交內(nèi)容:
$ git last
C.用 git checkout 命令切換分支:
$ git checkout -- 文件名 <-- 把指定文件在工作區(qū)的修改全部撤銷
注:在資源/文件管理器中誤刪除指定文件后可恢復(fù)蝴光。
注:-- 很重要,沒有 --达址,就變成了切換到指定分支的命令蔑祟。
注意以下兩種情況:
- 文件自修改后還沒有被放到暫存區(qū),撤銷修改就回到了和版本庫里面最新版本一樣的狀態(tài)沉唠;
- 文件修改后并且已經(jīng)添加到暫存區(qū)做瞪,再作修改,撤銷修改后就和暫存區(qū)的版本一樣的狀態(tài)右冻;
即讓文件回到最后一次 git add 或 git commit 時的狀態(tài)装蓬。
$ git checkout -b <本地新分支名> <遠(yuǎn)程主機名>/<遠(yuǎn)程分支名>
注:用 git checkout -b 命令在<遠(yuǎn)程主機名>/<遠(yuǎn)程分支名>的基礎(chǔ)上,
創(chuàng)建一個本地新分支并切換為當(dāng)前分支纱扭。
$ git checkout -b <本地新分支名>
等同于
$ git branch <本地新分支名>
$ git checkout <本地新分支名>
注:在本地當(dāng)前分支的基礎(chǔ)上牍帚,創(chuàng)建本地新分支并將其切換為本地當(dāng)前分支。
用 git branch 命令查看所有分支乳蛾,當(dāng)前分支前面會標(biāo)一個*號暗赶。
$ git checkout <本地分支名> <-- 切換到指定本地分支
D.用 git rm 命令刪除文件:
$ git rm 文件名
注:執(zhí)行 git commit 命令后文件就從版本庫中被刪除了鄙币。
E.創(chuàng)建 SSH Key :
$ ssh-keygen -t rsa -C 電子郵箱名
注:Windows 下打開 Git Bash 。
當(dāng)前用戶目錄里找到 .ssh 目錄蹂随,里面有 id_rsa 和 id_rsa.pub 兩個文件十嘿,
id_rsa - 私鑰,不能泄露出去岳锁,
id_rsa.pub - 公鑰绩衷,可以發(fā)給別人。
F.用 git remote 命令列出所有遠(yuǎn)程主機:
$ git remote
$ git remote -v <-- 可以查看遠(yuǎn)程主機的網(wǎng)址
注:為了便于管理激率,Git 要求每個遠(yuǎn)程主機都必須指定一個主機名咳燕。
克隆版本庫的時候,所使用的遠(yuǎn)程主機自動被 Git 命名為 origin 乒躺。
如果想用其它的主機名招盲,需要用 git clone 命令的 -o 選項指定。
1) 用 git remote rename <原主機名> <新主機名> 命令更改遠(yuǎn)程主機名嘉冒。
2) 用 git remote rm <主機名> 命令于刪除遠(yuǎn)程主機曹货。
3) 用 git remote show <主機名> 命令查看該主機的詳細(xì)信息。
G.用 git remote add 命令添加遠(yuǎn)程主機:
$ git remote add 遠(yuǎn)程主機名 遠(yuǎn)程主機地址
GitHub:
$ git remote add origin git@github.com:帳戶名/版本庫名.git
bitbucket:
$ git remote add origin git@bitbucket.org:帳戶名/版本庫名.git
注:origin 是遠(yuǎn)程主機名讳推,這是 Git 默認(rèn)的叫法控乾,也可以改成別的。
H.用 git push 命令把本地庫的所有內(nèi)容推送到遠(yuǎn)程庫上:
$ git push <遠(yuǎn)程主機名> <本地分支名>:<遠(yuǎn)程分支名>
$ git push --all <遠(yuǎn)程主機名> <-- 不管是否存在對應(yīng)的遠(yuǎn)程分支娜遵,將本地的所有分支都推送到遠(yuǎn)程主機
$ git push <遠(yuǎn)程主機名> :<遠(yuǎn)程分支名> <-等同-> $ git push <遠(yuǎn)程主機名> --delete <遠(yuǎn)程分支名>
注:如果省略本地分支名蜕衡,則表示刪除指定的遠(yuǎn)程分支,因為這等同于推送一個空的本地分支到遠(yuǎn)程分支设拟。
$ git push -u <遠(yuǎn)程主機名> <本地分支名>
注:如果當(dāng)前分支與多個主機存在追蹤關(guān)系慨仿,則可以使用 -u 選項指定一個默認(rèn)主機,
Git 不僅會把本地分支名內(nèi)容推送到遠(yuǎn)程主機上新建同名分支纳胧,
還會把本地分支和遠(yuǎn)程主機的同名分支關(guān)聯(lián)起來镰吆,
這樣接下來就可以用 git push <遠(yuǎn)程主機名> 命令。
如果當(dāng)前分支只有一個追蹤分支跑慕,那么主機名都可以省略万皿,用 git push 命令。
$ git push --force <遠(yuǎn)程主機名>
注:如果遠(yuǎn)程主機的版本比本地版本更新核行,推送時Git會報錯牢硅,
要求先在本地做git pull合并差異,然后再推送到遠(yuǎn)程主機芝雪。
使用 --force 選項减余,會導(dǎo)致遠(yuǎn)程主機上更新的版本被覆蓋。
$ git push <遠(yuǎn)程主機名> --tags
注:使用 --tags 選項推送標(biāo)簽惩系。
I.用 git clone 命令從遠(yuǎn)程主機克隆一個版本庫:
$ git clone <版本庫的地址> <-- 在本地主機生成一個目錄位岔,與遠(yuǎn)程主機的版本庫同名
$ git clone <版本庫的地址> <本地目錄名> <-- 在本地主機生成一個指定的目錄名
注:版本庫的地址支持 HTTP(S)如筛、SSH、Git抒抬、本地文件協(xié)議等杨刨。
使用 https 除了速度慢以外,還有個最大的麻煩是每次推送都必須輸入口令擦剑!
$ git clone [user@]域名:帳戶名/版本庫名.git <-- SSH 協(xié)議
執(zhí)行 git clone 成功后妖胀,所有本地分支默認(rèn)與遠(yuǎn)程主機的同名分支,建立追蹤關(guān)系抓于。
J.用 git fetch 命令將遠(yuǎn)程主機的更新取回本地:
$ git fetch <遠(yuǎn)程主機名> <-- 將指定遠(yuǎn)程主機的全部更新到本地
$ git fetch <遠(yuǎn)程主機名> <遠(yuǎn)程分支名> <-- 將指定遠(yuǎn)程主機的指定分支更新到本地
K.用 git merge 或 git rebase 命令在本地分支上合并遠(yuǎn)程分支:
$ git merge <遠(yuǎn)程主機名>/<遠(yuǎn)程分支名>
$ git rebase <遠(yuǎn)程主機名>/<遠(yuǎn)程分支名>
注:在當(dāng)前分支上,合并<遠(yuǎn)程主機名>/<遠(yuǎn)程分支名>浇借。
L.用 git pull 命令取回遠(yuǎn)程主機上某個分支的更新捉撮,再與本地的指定分支合并:
$ git pull <遠(yuǎn)程主機名> <遠(yuǎn)程分支名>:<本地分支名>
注:用 git branch --set-upstream <本地分支名> <遠(yuǎn)程主機名>/<遠(yuǎn)程分支名> 命令,
來手動建立追蹤關(guān)系妇垢。
當(dāng)前分支與遠(yuǎn)程分支建立了追蹤關(guān)系巾遭,就可以省略 <本地分支名>:<遠(yuǎn)程分支名>,
用 git pull <遠(yuǎn)程主機名> 命令取回更新再合并闯估。
如果當(dāng)前分支只有一個追蹤分支灼舍,連遠(yuǎn)程主機名都可以省略,
用 git pull 命令取回更新再合并涨薪。
$ git pull <遠(yuǎn)程主機名> <遠(yuǎn)程分支名>
注:上面這個命令表示骑素,取回指定遠(yuǎn)程主機的指定分支,再與當(dāng)前分支合并刚夺,
等同于先執(zhí)行 git fetch 命令献丑,再做 git merge 命令:
$ git fetch <遠(yuǎn)程主機名>
$ git merge <遠(yuǎn)程主機名>/<遠(yuǎn)程分支名>
M.用 git merge 命令合并指定分支到當(dāng)前分支:
$ git merge <本地指定分支名> 或 <遠(yuǎn)程主機名>/<遠(yuǎn)程分支名>
注 Git 用如下格式標(biāo)記出沖突內(nèi)容:
<<<<<<< HEAD
合并時有沖突的當(dāng)前分支內(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 <-- 命令查看遠(yuǎn)程分支
$ git branch -a <-- 命令查看所有分支
$ git branch <本地新分支名> <-- 創(chuàng)建本地當(dāng)前分支的新分支
$ git branch -d <本地分支名> <-- 刪除本地指定的分支
注:因為創(chuàng)建醉蚁、合并和刪除分支非常快鬼店,所以 Git 鼓勵你使用分支完成某個任務(wù)馍管,
這和直接在主分支上工作效果是一樣的,但過程更安全薪韩。
Git 分支十分強大确沸,在團隊開發(fā)中應(yīng)該充分應(yīng)用捌锭。
$ git branch -D <本地分支名>
注:新分支還沒有合并過,需要強行刪除使用 -D 參數(shù)罗捎。
$ git log --graph <-- 可以看到分支合并圖
O.用 git stash 命令存放當(dāng)前工作現(xiàn)場:
$ git stash
$ git stash list <-- 查看存放的工作現(xiàn)場
$ git stash pop <-- 恢復(fù)并刪除存放的工作現(xiàn)場
等同于
$ git stash apply stash@{數(shù)字} <-- 恢復(fù)存放的指定工作現(xiàn)場
$ git stash drop stash@{數(shù)字} <-- 刪除存放的工作現(xiàn)場
注:如要僅有一個观谦,則可省略 stash@{數(shù)字} 參數(shù)。
P.用 git tag 命令查看標(biāo)簽:
$ git tag <-- 查看標(biāo)簽
注:標(biāo)簽不是按打標(biāo)簽的時間順序列出桨菜,而是按標(biāo)簽名字母排序的豁状。
$ git tag <標(biāo)簽名> <-- 打標(biāo)簽
$ git tag <標(biāo)簽名> [版本號] <-- 對指定版本號打標(biāo)簽
$ git tag -a <標(biāo)簽名> -m "標(biāo)簽說明信息" [版本號] <-- -a 參數(shù)指出標(biāo)簽名,-m 參數(shù)指出說明信息
注:首先切換到需要打標(biāo)簽的分支上倒得,再打標(biāo)簽泻红。
$ git show <標(biāo)簽名> <-- 查看標(biāo)簽信息
$ git tag -d <標(biāo)簽名> <-- 刪除指定的標(biāo)簽
$ git push <遠(yuǎn)程主機名> <標(biāo)簽名> <-- 推送指定標(biāo)簽到指定遠(yuǎn)程主機
$ git push origin --tags <-- 一次性推送全部尚未推送到遠(yuǎn)程的本地標(biāo)簽
注如果標(biāo)簽已經(jīng)推送到遠(yuǎn)程,要刪除遠(yuǎn)程標(biāo)簽霞掺,就要先從本地刪除谊路,然后從遠(yuǎn)程刪除:
$ git tag -d <標(biāo)簽名>
$ git push origin :refs/tags/<標(biāo)簽名>
轉(zhuǎn)自:http://blog.sina.com.cn/s/blog_4c451e0e0102vhpc.html