Git使用筆記

 

轉自: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 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章