git协作常用命令
以下為git常用的命令的總結,方便大家查閱與參考:
以下文章中,遠程倉庫表示git clone 來源的倉庫,上游倉庫是git add <remote>的倉庫;
概念解析
借用圖來說明:
幾個概念:
workspace:工作區,也就是我們寫代碼的地方,它持有實際的文件;
index:也可以叫做stage,暫存區,它實際上就是一個包含文件索引的目錄樹 ,當對工作區修改(或新增)的文件執行 "git add" 命令時,暫存區的目錄樹被更新。
local repository:本地倉庫,我們使用“git commit”時,實際是把代碼提交到了本地倉庫;
remote repository:遠端倉庫,當我們使用“git push”時,才將我們的本地代碼提交到了遠端的倉庫,比如github上。
origin
遠程庫的名字就是origin,這是Git默認的叫法,也可以改成別的。
?
常用命令
克隆倉庫:
克隆本地倉庫:
git clone /path/to/repository復制代碼克隆遠端服務器倉庫:
git clone username@host:/path/to/repository復制代碼?
設置上游倉庫
設置上游倉庫,就可對上游倉庫的代碼進行fetch等操作,多用于協同開發;
git remote add <name> <url>復制代碼url是遠程倉庫的的地址,這么設置后,可用name代替url;
?
查看上游倉庫
查看所有上游倉庫分支:
git branch -r復制代碼查看所有上游倉庫名字:
git remote復制代碼查看所有上游倉庫名字和git地址:
git remote -v復制代碼刪除上游倉庫:
git remote rm <remote>復制代碼替換已有的上游分支的url:
git remote set-url <remote> <url> //這會使原本關聯的remote的url替換成新的url復制代碼?
分支
創建倉庫的時候,
master是“默認的”。在其他分支上進行開發,完成后再將它們合并到主分支上。
創建一個feature_x分支,并且切換到feature_x分支上:
git checkout -b feature_x //不加-b則是切換到某一分支上復制代碼刪除分支:
git branch -d feature_x復制代碼查看當前所處分支:
git branch復制代碼查看包括上游倉庫與遠程倉庫所有分支:
git branch --all復制代碼?
拉取更新
git fetch //拉取遠程倉庫更新到本地倉庫,默認為git clone的那個倉庫; git fetch <name> <branch> //拉取遠程倉庫名為<name> 的 某一分支<branch>上的代碼,<branch>可省略;復制代碼如果我們有多個remote都需要更新,可以使用:
git remote update //或者 git fetch --all復制代碼合并更新
如果有沖突,則要手動合并;
在合并之前可以選擇性執行如下操作:
git diff <name>/<target_branch>//比較本地工作區與上游倉庫特定分支的差別; git stash //保存當前更改到緩存區 git merge <name>/<target_branch> //將上游倉庫的特定分支代碼合并到本地; git stash pop //將緩存區代碼提出到本地,并修改沖突;復制代碼快捷操作:
git pull //相當于git fetch和git merge的兩部操作 復制代碼強制更新遠程倉庫的代碼到本地(慎用):
git merge --rebase 復制代碼rebase與merge區別參考鏈接:hackernoon.com/git-merge-v…
?
存儲到緩存區以及拉取緩存區內容
緩存區存放工作區文件改動內容,當執行git stash后,所有改動被放到緩存區,并且工作區恢復到沒有改動之前。
git stash git stash pop復制代碼?
添加到暫存區
添加到暫存區(index):
git add <filename>;//添加單個文件; git add . //git 2.0 以上添加所有改動; git add -u //添加修改某些文件和刪除某些文件的改動,但不添加新建文件的改動;復制代碼?
提交和推送改動
提交暫存區的改動到本地倉庫:
git commit -m "代碼提交信息"復制代碼推送本地倉庫改動到遠程倉庫,比如要提交到master分支上:
git push origin master復制代碼強制推送(慎用):
git push --force復制代碼?
查看當前狀態
列出當前目錄所有還沒有被git管理的文件和被git管理且被修改但還未提交(git commit)的文件:
git status復制代碼查看記錄
查看所有commit記錄:
git log復制代碼git log常用選項:
| -p | 按補丁格式顯示每個更新之間的差異 |
| –stat | 顯示每次更新的文件修改統計信息 |
| –shortstat | 只顯示 –stat 中最后的行數修改添加移除統計 |
| –name-only | 僅在提交信息后顯示已修改的文件清單 |
| –name-status | 顯示新增、修改、刪除的文件清單 |
| –abbrev-commit | 僅顯示 SHA-1 的前幾個字符,而非所有的 40 個字符 |
| –relative-date | 使用較短的相對時間顯示(比如,“2 weeks ago”) |
| –graph | 顯示 ASCII 圖形表示的分支合并歷史 |
| –pretty | 使用其他格式顯示歷史提交信息。可用的選項包括 oneline,short,full,fuller 和 format(后跟指定格式) |
限制輸出長度
除了用 -n 來限制輸出 log 的條數,還可以用 --since 和 --until 按照時間作限制。
用 --author 選項顯示指定作者的提交,用 --grep 選項搜索提交說明中的關鍵字。
回滾
執行git reset --hard commit_id :
例如我們需要回退到新增MVC模式的上一個版本,則執行:
git reset a5f2a27f02d32b666e01c24ed2218598db57a183 //此為默認方式,不帶任何參數的git reset它回退到某個版本,只保留源碼,回退commit和index信息復制代碼如果是--hard參數,則徹底回退到某個版本,本地工作區也會變為上一個版本的內容:
git reset --hard a5f2a27f02d32b666e01c24ed2218598db57a183復制代碼如果是--soft參數,會保留工作區和暫存區的記錄,在下次可以直接commit:
git reset --soft a5f2a27f02d32b666e01c24ed2218598db57a183復制代碼這種情況下在push時,要執行:
git push --force 復制代碼
比較提交
比較當前工作區與暫存區之間的差異:
git diff復制代碼比較暫存區與本地倉庫之間的差異:
git diff --cached復制代碼比較當前工作區與本地倉庫之間的差異:
git diff Head復制代碼比較當前工作區與另外一個分支的差別,比如分支為test:
git diff test復制代碼比較當前工作區與暫存區有哪些文件被改動,改動了多少行:
git diff --stat復制代碼比較兩個分支的操作:
git diff <source_branch> <target_branch>復制代碼?
交互式的rebase
列出即將push的所有git commit ,編輯這些commit,可以對這些commit進行合并,修改,丟棄,編輯,拆分操作:
git rebase -i //會打開編輯器,可修改commit記錄 git rebase -i <after-this-commit> //當前分支中的所有提交復制代碼rebase 參考鏈接git-scm.com/docs/git-re…;
rebase 拆分commit參考鏈接:www.codebelief.com/article/201…/
?
參考鏈接
git簡易指南:www.bootcss.com/p/git-guide/
git協同開發:www.cnblogs.com/arkenstone/…
github文章借鑒:github.com/WarpPrism/B…
gitbook:gitbook.liuhui998.com/index.html
總結
- 上一篇: Auto-Scaling Web App
- 下一篇: 策略模式设计