一、前言
記錄一下工作中常用到的git命令,只是簡單的筆記,歡迎大家交流...
[
順便問下園友們,怎么感覺博客園發布的博客搜索有時都搜不到,后台編輯能填的都填寫了,還是覺得搜索排名不高?
相同的標題搜索到的都是被抓取工具抓取的另一個平台下的文章了...
]
還是先貼張圖(此圖來自阮大神的blog)
二、git branch 和 git checkout
git branch //查看當前分支 git branch -r //列出遠程分支 git branch -a //列出所有分支 git branch branchName //創建分支 git checkout branchName //切換分支 git checkout -b branchName //創建並切換到分支 git checkout //后面不跟任何參數,則就是對工作區進行檢查 git checkout --filename //從暫存區中恢復文件(確保filename與branch名稱不同) git status //查看狀態
三、git clone 和 git remote
git clone <版本庫的網址> <本地目錄名> git clone支持多種協議,除了HTTP(s)以外,還支持SSH、Git、本地文件協議等,下面是一些例子。 $ git clone http[s]://example.com/path/to/repo.git/ $ git clone ssh://example.com/path/to/repo.git/ $ git clone git://example.com/path/to/repo.git/ $ git clone /opt/git/project.git $ git clone file:///opt/git/project.git $ git clone ftp[s]://example.com/path/to/repo.git/ $ git clone rsync://example.com/path/to/repo.git/ SSH協議還有另一種寫法 $ git clone [user@]example.com:path/to/repo.git/ ========================================= git remote git remote -v //查看遠程主機的網址 git remote show <主機名> //查看該主機的詳細信息 git remote add <主機名> <網址> //添加遠程主機 git remote rm <主機名> //刪除遠程主機 git remote rename <原主機名> <新主機名> //重命名遠程主機
四、git pull 和 git push
$ git pull <遠程主機名> <遠程分支名>:<本地分支名> $ git push <遠程主機名> <本地分支名>:<遠程分支名> from to git pull origin master:master 取回origin主機的master分支,與本地的master分支合並 git push origin master:master 推送本地的master分支,與origin主機的master分支合並 git pull origin master 如果遠程分支是與當前分支合並,則冒號后面的部分可以省略。 git push origin master 本地的master分支推送到origin主機的master分支。如果后者不存在,則會被新建 git pull origin 本地的當前分支自動與對應的origin主機”追蹤分支”(remote-tracking branch)進行合並。 追蹤分支 是 遠程的同名分支 git push origin 當前分支與遠程分支之間存在追蹤關系,則本地分支和遠程分支都可以省略 git pull 當前分支自動與唯一一個追蹤分支進行合並 git push 當前分支只有一個追蹤分支,那么主機名都可以省略
五、git merge 和 git rebase
git merge 用"pull"命令把"origin"分支上的修改拉下來並且和你的修改合並; 結果看起來就像一個新的"合並的提交"(merge commit): //使用 rebase 合並 $ git checkout mywork $ git rebase origin 這些命令會把你的"mywork"分支里的每個提交(commit)取消掉, 並且把它們臨時 保存為補丁(patch)(這些補丁放到".git/rebase"目錄中), 然后把"mywork"分支更新 到最新的"origin"分支, 最后把保存的這些補丁應用到"mywork"分支上 在rebase的過程中,也許會出現沖突(conflict). 在這種情況, Git會停止rebase並會讓你去解決 沖突;在解決完沖突后, 用"git-add"命令去更新這些內容的索引(index), 然后,你無需執行 git-commit,只要執行: $ git rebase --continue 這樣git會繼續應用(apply)余下的補丁。 在任何時候,你可以用--abort參數來終止rebase的行動,並且"mywork" 分支會回到rebase開始前的狀態。 $ git rebase --abort
六、git log
git log --stat -n 5 // 簡單的列出了修改過的文件 git log -p -n 5 // 詳細的列出修改過的文件,及提交文件的對比 git log --graph // ASCII 字符串表示的簡單圖形,形象地展示了每個提交所在的分支及其分化衍合情況 git log --all --decorate --graph git log --pretty=oneline // 只顯示哈希值和提交說明 git log --pretty=oneline/short/full/fuller/format:""(格式等) git log --name-only // 僅在提交信息后顯示已修改的文件清單 git log --no-merges // 不顯示merge的log git log --name-status -n 5 --author='fanfan' // 按作者篩選 git log --name-status -n 5 --grep='commit desc' //按提交描述內容篩選 git log --name-status -n 5 -- path/file1 path/file2 //按提交的文件篩選 git log --name-status -n 5 -S"hello world" //按文件內容篩選 git log --name-status -n 5 -G"xxx" //按文件內容篩選(正則匹配) 常用的命令: git log --name-status -n 5 --no-merges path/filename // 顯示新增、修改、刪除的文件清單(不包含merge的log) git log --name-status --skip=5 -n 5 --no-merges path/filename // 略過5條,從第6條開始取5條log
七、git stash
保存工作現場 git stash // 保存工作現場 do some work git pop // 返回工作現場 git stash list //查看 stash 隊列 git stash pop stash@{num} // num就是list中要恢復的工作現場編號 // 使用pop命令恢復的工作現場,其對應的stash 在隊列中刪除 git stash apply stash@{num} // num就是list中要恢復的工作現場編號 // 使用apply命令恢復的工作現場,其對應的stash 在隊列中不刪除 git stash clear // 情況 stash 隊列
八、分支合並
分支合並: 1.保持工作目錄 clean 2.git checkout master //切換到主干 3.git merge subscribeQY //在主干上合並分支 4.如果有沖突就解決一下 master push前,在分支上merge master 然后,在master上,merge 分支,在 push
九、沖突解決
[Tips]:發生沖突時,你可以手工將需要合並的這個分支/版本merge到自己的分支上,解決沖突后提交,可避免此情況的發生. [Tips]:你可以根據如下步驟解決沖突: 1、git fetch 2、git checkout releases/xxx (注:如本地還未檢出過發布分支,請執行 git checkout -b releases/xxx origin/releases/xxx) 3、git pull 4、使用版本號合並,將出現的沖突一一解決 git merge --no-ff b109eff1348a2fcf9a793deb81f3981d691e453c 5、git status 查看沖突,並按命令提示進行修復 6、git add xxx git commit xxx 7、git push origin releases/xx
十、其他
$ git fetch <遠程主機名> <分支名> git fetch origin master 取回origin主機的master分支 git checkout . #本地所有修改的。沒有的提交的,都返回到原來的狀態 git stash #把所有沒有提交的修改暫存到stash里面。可用git stash pop回復。 git reset --hard HASH #返回到某個節點,不保留修改。 git reset --soft HASH #返回到某個節點。保留修改
十一、參考資料
http://www.ruanyifeng.com/blog/2014/06/git_remote.html http://gitbook.liuhui998.com/4_2.html http://www.tuicool.com/articles/A3Mn6f