轉自:http://www.360doc.com/content/13/1024/10/8504707_323712757.shtml
git config --list 查看系統變量的配置
export https_proxy="http://XXXXXX:XXXXXX@XXXXXX:8080/" 配置代理
密碼中的特殊字符轉義:
ampersand & (%26)
at @ (%40)
space (%20)
double-quote " (%22)
single-quote ' (%27)
colon : (%3A)
git clone git://github.com/schacon/grit.git mygrit 後面可以自定義要新建的項目目錄名稱
git status 查看哪些文件當前處於什麼狀態
git add <file> 將文件添加到暫存區
刪除文件:
1、手動刪除
2、git rm <filename> (如果要刪除之前修改過且已暫存的文件,要加-f)
3、提交
從暫存中移除,但不刪除文件:
git rm --cached readme.txt
取消暫存:
git reset HEAD readme.txt
放棄未暫存文件所做的修改:
git checkout -- readme.txt
文件重命名:
git mv <file_from> <file_to> ,相當於:
$ mv README.txt README
$ git rm README.txt
$ git add README
git diff 查看尚未暫存的文件更新了哪些部分
git diff --cached 查看已經暫存起來的文件和上次提交之間的差異
忽略文件
$ cat .gitignore
*.[oa]
!lib.a
temp/
如果文件已經暫存,不會立即使用gitignore的新規則,此時先用git rm --cached filename
也可使用全局的.gitignore文件來對所有的代碼庫生效,比如新建文件~/.gitignore_global,然後執行:
git config --global core.excludesfile ~/.gitignore_global
提交:
git commit
git commit -m "commit message" 提交
git commit -a -m "commit message" 跳過暫存,直接提交
git commit --amend 重新提交,剛纔提交完沒有作任何改動,可以重新編輯提交說明,也可以
git add <file>, git commit --amend 增加要提交的文件,只會產生一次提交記錄
日誌查看:
git log -p展開顯示提交的內容差異;-2顯示最近兩條;--stat,僅顯示簡要的增改行數統計;
git log --pretty=oneline 每個提交放在一行顯示
git log --no-merges 不顯示merge的記錄
git log --since=2.weeks 查看兩週內提交記錄,或類似於--since="2008-10-01" --before="2008-11-01"
--grep 搜索提交中的關鍵字
--author --committer
圖形化工具:gitk
標籤:
git tag 列出標籤
爲先前的提交加標籤:
1、git log --pretty=oneline
2、git tag -a v1.2 9fceb02
推送標籤到遠端倉庫:
git push origin v1.2
一次性推送所有標籤:
git push origin --tags
git remote -v 查看遠程倉庫和克隆地址
git remote add [shortname] [url] 添加一個遠程倉庫
git remote show [remote-name] 顯示遠端倉庫的詳細信息
git remote rename old_name new_name 修改遠端倉庫在本地的簡稱
git remote rm [remote-name] 移除遠端倉庫
git fetch [repo] [branch] 抓取遠程倉庫的更新,但不合並(克隆操作會自動使用默認的 master 和 origin 名字)
git fetch origin branch1 設定當前分支的 FETCH_HEAD' 爲遠程服務器的branch1分支, 這個操作是git pull origin branch1的第一步
git fetch origin branch1:branch2
首先執行上面的fetch操作
使用遠程branch1分支在本地創建branch2(但不會切換到該分支),
如果本地不存在branch2分支, 則會自動創建一個新的branch2分支,
如果本地存在branch2分支, 並且是`fast forward', 則自動合併兩個分支, 否則, 會阻止以上操作
git pull [repo] [branch] 將遠端分支自動合併到本地倉庫中當前分支
git push [remote-name] [branch-name] 將本地倉庫中的數據推送到遠程倉庫,一個示例(將本地分支提交到遠程倉庫的另一個分支):git push origin localbranch:remotebranch
分支:
git checkout -b [分支名] [遠程名]/[分支名] 創建分支(-d 刪除分支,-D 強制刪除)
git checkout <branch_name> 切換到分支(-b 新建並切換)
刪除遠程服務器上的分支:git push origin :<remote_branch>
git merge <new_branch> 將新分支的內容合併到當前分支,如果遇到衝突,可以使用git status查看衝突的文件,手工解決後,git add,比如:
1. <<<<<<< HEAD:index.html
2. <div id="footer">contact : [email protected]</div>
3. =======
4. <div id="footer">
5. please contact us at [email protected]
6. </div>
7. >>>>>>> iss53:index.html
git merge --no-ff myfeature --no-ff標記會使合併永遠創建一個新的commit對象,在新的分支中保留myfeature分支的merge記錄。
或者使用rebase(衍合):
git checkout dev
git rebase master
生成dev分支的patch,在master分支打一遍,使dev成爲master分支的直接下游(會修改dev的提交歷史),這樣,在maste分支執行git merge dev就完成了分支的合併;
git rebase --onto master server client 取出 client 分支,找出 client 分支和 server 分支的共同祖先之後的變化,然後把它們在 master 上重演一遍(暫不合並server分支),然後在進入master分支進行merge操作。
git rebase master server 隨後衍合server分支
使用衍合需要注意:旦分支中的提交對象發佈到公共倉庫,就千萬不要對該分支進行衍合操作。如果把衍合當成一種在推送之前清理提交歷史的手段,而且僅僅衍合那些尚未公開的提交對象,就沒問題。
git branch --merged,查看哪些分支已合併到當前分支
git branch --no-merged,查看那些分支尚未合併到當前分支,此時也可以強制刪除分支:git branch -D <branch_name>
假如你想要丟棄你所有的本地改動與提交,可以到服務器上獲取最新的版本並將你本地主分支指向到它:
git fetch origin
git reset --hard origin/master
git format-patch 爲每個提交生成一個 .patch 後綴的 mbox 文件
應用補丁:
1、對於git diff命令生成的補丁文件,使用git apply,是事務性操作,比patch命令嚴謹很多 ,可以先用git apply --check查看補丁是否能夠乾淨順利地應用到當前分支;
2、對於format-patch生成的補丁,使用git am,自動創建提交對象,如果出現衝突:
1. $ (fix the file)
2. $ git add file
3. $ git am --resolved