git協做經常使用命令

如下爲git經常使用的命令的總結,方便你們查閱與參考:css

如下文章中,遠程倉庫表示git clone 來源的倉庫,上游倉庫是git add <remote>的倉庫;html

概念解析

借用圖來講明:git

  • 幾個概念:github

    • workspace:工做區,也就是咱們寫代碼的地方,它持有實際的文件;緩存

    • index:也能夠叫作stage,暫存區,它實際上就是一個包含文件索引的目錄樹 ,當對工做區修改(或新增)的文件執行 "git add" 命令時,暫存區的目錄樹被更新。bash

    • local repository:本地倉庫,咱們使用「git commit」時,實際是把代碼提交到了本地倉庫;服務器

    • remote repository:遠端倉庫,當咱們使用「git push」時,纔將咱們的本地代碼提交到了遠端的倉庫,好比github上。編輯器

  • originide

    • 遠程庫的名字就是origin,這是Git默認的叫法,也能夠改爲別的。fetch

經常使用命令

克隆倉庫:

克隆本地倉庫:

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

相關文章
相關標籤/搜索