我所記錄的git命令(非常實用)


一、前言

  記錄一下工作中常用到的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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM