git中常用的一些命令

git diff

比較區(qū)別
1,當工作區(qū)有改動的時候,臨時區(qū)為空(沒有進行git add),那么diff的對比是和上次的commit的記錄進行對比的。
2,當工作區(qū)有改動,臨時區(qū)有東西的時候,diff是和臨時區(qū)進行比較的。

git remote的相關命令

git remote命令讓我們可以創(chuàng)建, 查看, 刪除一個到其他倉儲的連接。
用法

  • git remote
    列出來你的倉儲有哪些遠程連接.

  • git remote -v
    和上面的命令類似, 但是他列出了每個連接的url地址.

  • git remote add <name> <url>
    創(chuàng)建一個到遠程倉儲的連接. 添加后你可以使用<name>做為<url>的一個別名.

  • git remote rm <name>
    刪除一個遠程連接

  • git remote rename <old-name> <new-name>
    修改遠程連接的別名.

  • git remote set-url origin <URL>
    更換遠程倉庫地址。把<URL>更換為新的url地址。

git pull 與 git clone的區(qū)別

從字面意思理解,都是往下拉代碼,git clone是克隆,git pull 是拉。

但是,也有區(qū)別:
從遠程服務器克隆一個一模一樣的版本庫到本地,復制的是整個版本庫,叫做clone.(clone是將一個庫復制到你的本地,是一個本地從無到有的過程)

從遠程服務器獲取到一個branch分支的更新到本地,并更新本地庫,叫做pull.(pull是指同步一個在你本地版本對應的遠程庫內(nèi)容更新的部分到你的本地庫)

git pull

git pull命令的作用是,取回遠程主機某個分支的更新,再與本地的指定分支合并。
完整格式:$ git pull <遠程主機名> <遠程分支名>:<本地分支名>

完整格式舉例:比如,取回origin主機的next分支,與本地的master分支合并,需要寫成下面這樣,

  1. $ git pull origin next:master:如果遠程分支是與當前分支合并,則冒號后面的部分可以省略。
  2. $ git pull origin next:上面命令表示,取回origin/next分支,再與當前分支合并。實質(zhì)上,這等同于先做git fetch,再做git merge。
    $ git fetch origin
    $ git merge origin/next

在某些場合,Git會自動在本地分支與遠程分支之間,建立一種追蹤關系(tracking)。比如,在git clone的時候,所有本地分支默認與遠程主機的同名分支,建立追蹤關系,也就是說,本地的master分支自動”追蹤”origin/master分支。

Git也允許手動建立追蹤關系,git branch --set-upstream master origin/next
上面命令指定master分支追蹤origin/next分支。如果當前分支與遠程分支存在追蹤關系,git pull就可以省略遠程分支名。

git pull origin
上面命令表示,本地的當前分支自動與對應的origin主機”追蹤分支”(remote-tracking branch)進行合并。
如果當前分支只有一個追蹤分支,連遠程主機名都可以省略。

get clone

遠程操作的第一步,通常是從遠程主機克隆一個版本庫,這時就要用到git clone命令。

  1. $ git clone <版本庫的網(wǎng)址>
    比如,克隆jQuery的版本庫。
    $ git clone https://github.com/jquery/jquery.git

該命令會在本地主機生成一個目錄,與遠程主機的版本庫同名。如果要指定不同的目錄名,可以將目錄名作為git clone命令的第二個參數(shù)。

  1. $ git clone <版本庫的網(wǎng)址> <本地目錄名>

git clone支持多種協(xié)議,除了HTTP(s)以外,還支持SSH、Git、本地文件協(xié)議等,下面是一些例子。
$ 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/

  1. SSH協(xié)議還有另一種寫法。
    $ git clone [user@]example.com:path/to/repo.git/

通常來說,Git協(xié)議下載速度最快,SSH協(xié)議用于需要用戶認證的場合。

分支的相關命令

  • git branch
    查看有幾個分支

  • git branch branchA
    創(chuàng)建分支

  • git checkout branchA
    切換分支

  • git merge branchA
    合入分支代碼

  • git branch -d branchA
    刪除分支

  • git checkout -b dev
    此處其實是兩步git branch dev加上git checkout dev

使用git 配置用戶名和郵箱

  • git config --global user.name [username]
  • git config --global user.email [email]

如果你傳遞了 --global 選項,則Git將總是會使用該信息來處理你在系統(tǒng)中所做的一切操作。如果你希望在一個特定的項目中使用不同的名稱或e-mail地址,你可以在該項目中運行該命令而不要--global選項。

使用git config --list查看已設配置

  • git查看用戶名和郵箱地址
    $ git config user.name
    $ git config user.email

git log --graph

-graph標記會畫出一個ASCII圖展示commit歷史的分支結(jié)構(gòu)

處理沖突

git rebase處理沖突

假定采用的是git rebase,則處理過程為:

  • git rebase dev
    將dev上的c2、c5在master分支上做一次衍合處理
    git提示出現(xiàn)了代碼沖突,此處為之前埋下的沖突點,處理完畢后

  • git add readme
    添加沖突處理后的文件

  • git rebase --continue
    加上--continue參數(shù)讓rebase繼續(xù)處理

git rebase的特點

(交互式) 使用rebase命令合并分支,解決完沖突,執(zhí)行git add .和git rebase --continue,不會產(chǎn)生額外的commit。

這樣的好處是,‘干凈’,分支上不會有無意義的解決分支的commit;
壞處,如果合并的分支中存在多個commit,需要重復處理多次沖突。

git merge 處理沖突

(一股腦)使用merge命令合并分支,解決完沖突,執(zhí)行git add .和git commit -m'fix conflict'。這個時候會產(chǎn)生一個commit。

注意
1、我自己嘗試merge命令后,發(fā)現(xiàn):merge時并沒有產(chǎn)生一個commit。不是說merge時會產(chǎn)生一個merge commit嗎?

注意:只有在沖突的時候,解決完沖突才會自動產(chǎn)生一個commit。

如果想在沒有沖突的情況下也自動生成一個commit,記錄此次合并就可以用:git merge --no-ff命令。

merge和rebase的區(qū)別

參考: merge和rebase的區(qū)別

補充:

  1. 當我們使用Git log來參看commit時,兩者commit的順序也有所不同。
  2. 用merge確實只需要解決一遍沖突,比較簡單粗暴;用rebase有時候會需要多次fix沖突(原因在于本地分支已經(jīng)提交了非常多的commit,而且很久都沒有和上游合并過)

rebase和merge的使用場景

兩個使用場景是不一樣的,merge只是合并另外一個分支的內(nèi)容,rebase也合并另外一個分支的內(nèi)容,但是會把本分支的commits頂?shù)阶铐敹?/strong>

另外,單獨使用rebase,還有調(diào)整當前分支上commits的功能(合并,丟棄,修改commites msg)

參考:https://www.zhihu.com/question/36509119/answer/67828312

git stash和git stash pop

場景:工作一半修線上bug時使用
git stash 可用來暫存當前正在進行的工作, 比如想pull 最新代碼, 又不想加新commit, 或者另外一種情況,為了fix 一個緊急的bug, 先stash, 使返回到自己上一個commit, 改完bug之后再stash pop, 繼續(xù)原來的工作。

pull request 功能

  • code review
  • communication

當你想更正別人倉庫里的錯誤時,要走一個流程:

  1. 先 fork 別人的倉庫,相當于拷貝一份,相信我,不會有人直接讓你改修原倉庫的
  2. clone 到本地分支,做一些 bug fix
  3. 發(fā)起 pull request 給原倉庫,讓他看到你修改的 bug
  4. 原倉庫review 這個 bug,如果是正確的話,就會 merge 到他自己的項目中

參考:https://www.zhihu.com/question/21682976

fork功能

fork 別人的倉庫到自己的github賬號下,相當于拷貝一份

git revert和git reset head

git revert

git revert 是生成一個新的提交來撤銷某次提交,此次提交之前的commit都會被保留
git revert <commit log string>是撤消該commit,作為一個新的commit。

git reset

現(xiàn)在我們啟動時光穿梭機,準備把readme.txt回退到上一個版本:

首先,Git必須知道當前版本是哪個版本,在Git中,用HEAD表示當前版本,也就是最新的提交
上一個版本就是HEAD^,上上一個版本就是HEAD^^,當然往上100個版本寫100個^比較容易數(shù)不過來,所以寫成HEAD~100。

所以git reset head^就是回退到上一個版本。

git reset的相關參數(shù)

除了在當前分支上操作,還可以通過傳入這些標記來修改你的緩存區(qū)或工作目錄:

--soft – 緩存區(qū)和工作目錄都不會被改變
--mixed – 默認選項。緩存區(qū)和你指定的提交同步,但工作目錄不受影響
--hard – 緩存區(qū)和工作目錄都同步到你指定的提交

注意

  1. 當你傳入HEAD以外的其他提交的時候要格外小心,因為reset操作會重寫當前分支的歷史。正如Rebase黃金法則所說的,在公共分支上這樣做可能會引起嚴重的后果。
  2. 使用git reset是不影響遠程分支的,一切都在本地發(fā)生。

總結(jié):

  • HEAD指向的版本就是當前版本,因此,Git允許我們在版本的歷史之間穿梭,使用命令git reset --hard commit_id。

  • 穿梭前,用git log可以查看提交歷史,以便確定要回退到哪個版本。

  • 要重返未來,用git reflog查看命令歷史,以便確定要回到未來的哪個版本。

git reset head 參考:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013744142037508cf42e51debf49668810645e02887691000

git revert 和git reset的區(qū)別

參考:http://www.jb51.net/article/110651.htm

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 本文針對初級用戶,從最簡單的講起,但是需要讀者對Git的基本用法有所了解。 Git是開源的分布式版本控制系統(tǒng),...
    Sachie閱讀 1,247評論 0 2
  • 配置 首先是配置帳號信息 ssh -T git@github.com#登陸github 修改項目中的個人信息 1 ...
    rochuan閱讀 868評論 1 1
  • 三大區(qū)域: 工作區(qū) → 緩存區(qū) → 本地倉庫 一 、 使用 git config 命令進行配置: git ...
    Manchangdx閱讀 2,948評論 0 2
  • 昨天在簡書設計群聽了一個分享,關于競品分析,想來著實設計是相通的,在這邊把我們建筑設計前的調(diào)研報告方法也分享一下~...
    沐白_閱讀 10,588評論 4 53
  • 一共上了5節(jié)大學生心理委員培訓課收獲頗多,感觸頗深。 原先我并不懂大學為什么還要創(chuàng)立一個心理委員,認為這是多此一舉...
    509405ae8d53閱讀 545評論 0 0

友情鏈接更多精彩內(nèi)容