- 遠(yuǎn)程倉(cāng)庫(kù)相關(guān)命令
檢出倉(cāng)庫(kù):$ git clone git://github.com/jquery/jquery.git
查看遠(yuǎn)程倉(cāng)庫(kù):$ git remote -v
添加遠(yuǎn)程倉(cāng)庫(kù):$ git remote add [name] [url]
刪除遠(yuǎn)程倉(cāng)庫(kù):$ git remote rm [name]
修改遠(yuǎn)程倉(cāng)庫(kù):$ git remote set-url --push [name] [newUrl]
拉取遠(yuǎn)程倉(cāng)庫(kù):$ git pull [remoteName] [localBranchName]
推送遠(yuǎn)程倉(cāng)庫(kù):$ git push [remoteName] [localBranchName]
強(qiáng)制推送更改:$ git push --force origin master
如果想把本地的某個(gè)分支test提交到遠(yuǎn)程倉(cāng)庫(kù),并作為遠(yuǎn)程倉(cāng)庫(kù)的master分支,或者作為另外一個(gè)名叫test的分支,如下:
$ git push origin test:master // 提交本地test分支作為遠(yuǎn)程的master分支
$ git push origin test:test // 提交本地test分支作為遠(yuǎn)程的test分支
- 分支(branch)操作相關(guān)命令
查看本地分支:$ git branch
查看遠(yuǎn)程分支:$ git branch -r (如果還是看不到就先git fetch origin先)
創(chuàng)建本地分支:$ git branch [name] ----注意新分支創(chuàng)建后不會(huì)自動(dòng)切換為當(dāng)前分支
切換分支:$ git checkout [name]
創(chuàng)建新分支并立即切換到新分支:$ git checkout -b [name]
直接檢出遠(yuǎn)程分支:$ git checkout -b [name] [remoteName] (如:git checkout -b myNewBranch origin/dragon)
刪除分支:$ git branch -d [name] ---- -d選項(xiàng)只能刪除已經(jīng)參與了合并的分支,對(duì)于未有合并的分支是無(wú)法刪除的则北。如果想強(qiáng)制刪除一個(gè)分支
,可以使用-D選項(xiàng)合并分支:$ git merge [name] ----將名稱為[name]的分支與當(dāng)前分支合并
合并最后的2個(gè)提交:$ git rebase -i HEAD~2 ---- 數(shù)字2按需修改即可(如果需提交到遠(yuǎn)端$ git push -f origin master 慎用!)
創(chuàng)建遠(yuǎn)程分支(本地分支push到遠(yuǎn)程):$ git push origin [name]
刪除遠(yuǎn)程分支:$ git push origin :heads/[name] 或 $ git push origin :[name]
修改分支名稱:git branch -m <old_branch_name> <new_branch_name>
創(chuàng)建空的分支:(執(zhí)行命令之前記得先提交你當(dāng)前分支的修改,否則會(huì)被強(qiáng)制刪干凈沒(méi)得后悔)
$ git symbolic-ref HEAD refs/heads/[name]
$ rm .git/index
$ git clean -fdx
- 版本(tag)操作相關(guān)命令
查看版本:$ git tag
創(chuàng)建版本:$ git tag [name]
刪除版本:$ git tag -d [name]
查看遠(yuǎn)程版本:$ git tag -r
創(chuàng)建遠(yuǎn)程版本(本地版本push到遠(yuǎn)程):$ git push origin [name]
刪除遠(yuǎn)程版本:$ git push origin :refs/tags/[name]
合并遠(yuǎn)程倉(cāng)庫(kù)的tag到本地:$ git pull origin --tags
上傳本地tag到遠(yuǎn)程倉(cāng)庫(kù):$ git push origin --tags
創(chuàng)建帶注釋的tag:$ git tag -a [name] -m 'yourMessage'
- 子模塊(submodule)相關(guān)操作命令
添加子模塊:$ git submodule add [url] [path]
如:$ git submodule add git://github.com/soberh/ui-libs.git src/main/webapp/ui-libs
初始化子模塊:$ git submodule init ----只在首次檢出倉(cāng)庫(kù)時(shí)運(yùn)行一次就行
更新子模塊:$ git submodule update ----每次更新或切換分支后都需要運(yùn)行一下
刪除子模塊:(分4步走哦)
1) $ git rm --cached [path]
2) 編輯“.gitmodules”文件,將子模塊的相關(guān)配置節(jié)點(diǎn)刪除掉
3) 編輯“ .git/config”文件,將子模塊的相關(guān)配置節(jié)點(diǎn)刪除掉
4) 手動(dòng)刪除子模塊殘留的目錄
- 忽略一些文件掀亥、文件夾不提交
在倉(cāng)庫(kù)根目錄下創(chuàng)建名稱為“.gitignore”的文件,寫(xiě)入不需要的文件夾名或文件,每個(gè)元素占一行即可,如
target
bin
*.db
- 后悔藥
刪除當(dāng)前倉(cāng)庫(kù)內(nèi)未受版本管理的文件:$ git clean -f
恢復(fù)倉(cāng)庫(kù)到上一次的提交狀態(tài):$ git reset --hard
回退所有內(nèi)容到上一個(gè)版本:$ git reset HEAD^
回退a.py這個(gè)文件的版本到上一個(gè)版本:$ git reset HEAD^ a.py
回退到某個(gè)版本:$ git reset 057d
將本地的狀態(tài)回退到和遠(yuǎn)程的一樣:$ git reset –hard origin/master
向前回退到第3個(gè)版本:$ git reset –soft HEAD~3
修改最后的提交日志:$ git commit --amend
- Git一鍵推送多個(gè)遠(yuǎn)程倉(cāng)庫(kù)
編輯本地倉(cāng)庫(kù)的.git/config文件:
[remote "all"]
url = git@github.com:dragon/test.git
url = git@gitcafe.com:dragon/test.git
這樣,使用git push all即可一鍵Push到多個(gè)遠(yuǎn)程倉(cāng)庫(kù)中。
- 緩存認(rèn)證信息
$ git config credential.helper cache
- 查看提交日志
》查看文件中的每一行的作者、最新的變更提交和提交時(shí)間
$ git blame [fileName]
》查看倉(cāng)庫(kù)歷史記錄
有三個(gè)應(yīng)該知道的選項(xiàng)邻梆。
--oneline - 壓縮模式,在每個(gè)提交的旁邊顯示經(jīng)過(guò)精簡(jiǎn)的提交哈希碼和提交信息,以一行顯示奔誓。
--graph - 圖形模式,使用該選項(xiàng)會(huì)在輸出的左邊繪制一張基于文本格式的歷史信息表示圖。如果你查看的是單個(gè)分支的歷史記錄的話,該選項(xiàng)無(wú)效站粟。
--all - 顯示所有分支的歷史記錄
把這些選項(xiàng)組合起來(lái)之后如下:
使用 $ git log --oneline --graph --name-status 既可以看到簡(jiǎn)介的日志信息,也可以看到改了哪些文件,一舉兩得.
- 有選擇的合并 - 這個(gè)功能最贊,沒(méi)有之一
cherry-pick 可以從不同的分支中撿出一個(gè)單獨(dú)的commit,并把它和你當(dāng)前的分支合并黍图。如果你以并行方式在處理兩個(gè)或以上分支,你可能會(huì)發(fā)現(xiàn)
一個(gè)在全部分支中都有的bug。如果你在一個(gè)分支中解決了它,你可以使用cherry-pick命令把它c(diǎn)ommit到其它分支上去,而不會(huì)弄亂其他的文件或commit奴烙。
$ git cherry-pick [commitHash]
- Stash未提交的更改
正在修改某個(gè)bug或者某個(gè)特性,又突然被要求展示工作助被。而現(xiàn)在所做的工作還不足以提交,這個(gè)階段還無(wú)法進(jìn)行展示(不能回到更改之前)。在這種
情況下, git stash可以幫到忙了切诀。stash在本質(zhì)上會(huì)取走所有的變更并存儲(chǔ)它們以備將來(lái)使用揩环。
$ git stash
檢查stash列表:$ git stash list
想解除stash并且恢復(fù)未提交的變更,就進(jìn)行apply stash:$ git stash apply
如果只想留有余地進(jìn)行apply stash,給apply添加特定的標(biāo)識(shí)符:$ git stash apply stash@{0}
- 多次修改后拆分提交 - 暫存文件的部分改動(dòng)
一般情況下,創(chuàng)建一個(gè)基于特性的提交是比較好的做法,意思是每次提交都必須代表一個(gè)新特性的產(chǎn)生或者是一個(gè)bug的修復(fù)。如果你修復(fù)了兩個(gè)bug,或是添加了多個(gè)新特性但是卻沒(méi)有提交這些變化會(huì)怎樣呢?在這種情況下,你可以把這些變化放在一次提交中幅虑。但更好的方法是把文件暫存(Stage)然后分別提交丰滑。
例如你對(duì)一個(gè)文件進(jìn)行了多次修改并且想把他們分別提交。這種情況下,可以在 add 命令中加上 -p 參數(shù)
$ git add -p [fileName]
- 壓縮多個(gè)Commit
用rebase命令把多個(gè)commit壓縮成一個(gè):
git rebase -i HEAD~[number_of_commits]
如果你想要壓縮最后兩個(gè)commit,你需要運(yùn)行下列命令:
git rebase -i HEAD~2
Docs: [http://git-scm.com/book/en/v2/Git-Branching-Rebasing](http://git-scm.com/book/en/v2/Git-Branching-Rebasing)
- 差異查看
$ git diff --name-status HEAD~2 HEAD~3 <-- 獲得兩個(gè)版本間所有變更的文件列表
$ git diff HEAD HEAD~1 <-- 查看最近兩個(gè)提交之間的差異
$ git diff HEAD HEAD~2 <-- 查看第1個(gè)與第3個(gè)提交之間的差異
^ - 代表父提交,^n 表示第n個(gè)父提交,^相當(dāng)于^1 git尋根:^和~的區(qū)別 - 分析得很到位
~ - 代表連續(xù)的提交,~n相當(dāng)于連續(xù)的第n個(gè)提交
$ git diff master..test <-- 比較兩個(gè)分支之間的差異
$ git diff master...test <-- 比較master倒庵、test的共有父分支和 test 分支之間的差異
$ git diff test <-- 比較當(dāng)前工作目錄與 test 分支的差異
$ git diff HEAD <-- 比較當(dāng)前工作目錄與上次提交的差異
$ git diff HEAD -- ./lib <-- 比較當(dāng)前工作目錄下的lib目錄與上次提交的差異
$ git diff --stat <-- 統(tǒng)計(jì)一下有哪些文件被改動(dòng),有多少行被改動(dòng)
$ git diff --cached <-- 查看下次提交時(shí)要提交的內(nèi)容(staged,添加到索引中)
- Git for Windows 中文亂碼問(wèn)題 (1.9.4-preview20140611)
》git log 顯示的文件名亂碼
執(zhí)行 "git config –global core.quotepath false"可以解決之褒墨。core.quotepath設(shè)為false,就不會(huì)對(duì)0×80以上的字符進(jìn)行quote,中文就
》ls命令顯示的中文名亂碼
改用"ls --show-control-chars"命令代替單純的"ls"命令即可炫刷。
或者編輯.../Git/etc/git-completion.bash,新增一行 alias ls="ls –show-control-chars"
資料參考:
Git Submodule 的認(rèn)識(shí)與正確使用!
如何保持在 Git Submodule 代碼的開(kāi)放和私有共存
Git Submodule Tutorial
刪除 git submodule
pages.github.com
Git獲取遠(yuǎn)程分支
Git for Windows Unicode Support
Git一鍵推送多個(gè)遠(yuǎn)程倉(cāng)庫(kù)
圖解Git
使用git合并多個(gè)提交
git:多個(gè)commit合并提交
git rebase (本地分支合并) / git rebase (本地與遠(yuǎn)程同步)
git merge 和git rebase
版本控制系統(tǒng) Git 精要
10 個(gè)很有用的高級(jí) Git 命令
git修改歷史提交
10 個(gè)迅速提升你 Git 水平的提示
git尋根:^和~的區(qū)別 - 分析得很到位
比較提交 - Git Diff
說(shuō)明:Git for Windows 從 1.7.9 版本開(kāi)始支持使用中文文件、文件夾名稱了,結(jié)束了跨平臺(tái)中文亂碼的問(wèn)題郁妈。