Git使用總結

  • 2019 年 12 月 31 日
  • 筆記

文章目錄

1. Git使用總結

1.1. 開發策略

1.2. 解決衝突

1.2.1. 衝突產生

1.2.2. 衝突解決

1.3. 分支管理策略

1.4. Bug分支(git stash)

1.5. 添加公鑰到Github中

1.6. 遠程倉庫的使用

1.6.1. 常用命令

1.6.2. 遠程分支

1.6.2.1. 推送分支

1.6.2.2. 抓取分支

1.6.2.3. 總結

1.6.3. 標籤的使用

1.6.3.1. 創建標籤

1.6.3.2. 操作標籤

1.6.3.3. 刪除遠程標籤

1.7. 添加所有文件

Git使用總結

開發策略

  • 在實際開發的時候一定要在分支上開發,修復問題,開發完成之後再合併到主分支(master)上,這樣可以保證在不損壞主分支的情況下刪除或者撤銷內容

解決衝突

衝突產生

  • 假設現在有一個master分支,其中有一個提交之後的文件demo.txt,那麼我們使用git checkout -b dev創建一個新的分支並且切換到這個dev分支
    • echo chenjiabing >> demo.txt:在文件的末尾追加一個文件
    • git add file.txt : 添加到暫存區
    • git commit -m "this is at dev:提交
    • git checkout master : 切換到主分支
    • echo 陳加兵 >>demo.txt : 切換到主分支,在主分支中在文件的末尾追加陳加兵(這裡一定要在文件末尾,因為在dev分支中修改的位置就是文件末尾)
    • git add demo.txt : 添加到暫存區
    • git commit -m "this is at master" : 提交
    • git merge dev :快速合併分支dev到master分支上,那麼現在將會出現版本衝突的問題,不能合併成功。此時的demo.txt的文件內容為:

    Git is a distributed version control system. Git is free software distributed under the GPL. Git has a mutable index called stage. Git tracks changes of files. <<<<<<< HEAD 陳加兵 ======= chenjiabing >>>>>>> dev

衝突解決

  • 此時在master分支中修改demo.txt中的內容,直到滿意為止即可
    • git add demo.txt : 添加
    • git commit -m "this is finally" :提交

分支管理策略

  • 通常,合併分支時,如果可能,Git會用Fast forward模式,但這種模式下,刪除分支後,會丟掉分支資訊。
  • 如果要強制禁用Fast forward模式,Git就會在merge時生成一個新的commit,這樣,從分支歷史上就可以看出分支資訊。
  • git merge --no-ff -m "merge with no-ff" dev

Bug分支(git stash)

  • Bug分支
  • git stash 將當前的工作現場存儲起來
  • git stash list : 列出所有的工作現場
  • git stash pop : 回復當前分支的工作現場,並且還刪除了stash中的內容

添加公鑰到Github中

  • 如果你沒有在git中配置郵箱和用戶名,那麼需要先配置
    • git config --global user.name "CSDN id"
    • git config --global user.email "your email"
  • cd ~/.ssh: 進入主目錄的ssh文件夾中,查看是否已經存在秘鑰文件id_rusa.pub,如果不存在,那麼需要生成秘鑰
  • ssh-keygen -t rsa -C "your email" : 生成公鑰
  • 此時在~/.ssh文件夾下就有了id_rusa.pub文件夾,那麼將其中的內容全部複製到github中的SSH中
  • 注意: 添加遠程倉庫的時候一定要使用ssh形式,否則將會要求輸入密碼

遠程倉庫的使用

常用命令

  • git clone [email protected]:chenjiabing666/LearnGit.git :直接clone遠程倉庫到本地倉庫,此時的本地倉庫也有了push的權利,不過只能看到一個主分支master ,但是這個遠程倉庫還有dev分支和Bug分支
    • git checkout -b dev orgin/dev : 直接在本地創建一個分支dev並且和遠程倉庫的分支關聯起來,那麼就可以獲取遠程dev分支上的文件了
  • git remote : 查看遠程倉庫的名稱,這個只顯示名稱,使用git clone的方法關聯遠程倉庫,默認的名字為orgin
  • git remote -v : 顯示遠程倉庫的名稱和鏈接
  • git remote add shortName url : 添加一個新的遠程倉庫
  • git remote rename 舊名稱 新名稱 : 修改遠程倉庫的名稱
    • git remote rename orgin demo
  • git remote remove 名稱 : 刪除遠程倉庫
    • git remote remvoe orgin
  • git push 倉庫名稱 [分支名稱] : 將提交的文件推送到遠程倉庫
    • git push orgin : 將文件推送到遠程倉庫的主分支master
    • 假設我們新建了一個dev分支 使用命令git checkout -b dev ,那麼我們需要將這個dev分支推送到遠程倉庫中的dev分支上,使用git push orgin dev需要注意的是必須在當前的本地倉庫的dev分支才能推送,並且這個本地倉庫的名稱要和遠程倉庫一樣
  • git pull : 從遠程倉庫中拉取本地倉庫分支中沒有的文件並且合併到當前分支
    • 假設小明在master分支上提交了一個file.txt文件,但是小李的本地倉庫中並沒有file.txt這個文件,此時小李就需要從遠程倉庫中把這個文件拉取到自己的本地倉庫的master分支上
      • git checkout master : 切換到主分支
      • git pull : 拉取遠程倉庫的最新文件

遠程分支

推送分支

  • git push 名稱 分支名稱 : 推送分支到遠程倉庫中
    • git push orgin Bug : 推送本地的分支Bug推送到遠程倉庫中,那麼倉庫中默認的分支名就是Bug
  • 對於一些需要合作完成的分支需要推送到遠程倉庫,並不是所有的分支都需要推送到遠程倉庫的

抓取分支

  • 在多人協作完成項目的時候,都需要向主分支masterdev分支上面推送各自的修改
  • 我們使用git clone一個遠程倉庫的時候,默認情況下只能看到master分支,我們可以使用git branch查看分支。此時我們需要在dev分支上面操作,那麼就必須將遠程倉庫中的dev分支創建到本地,我們可以使用git checkout -b dev orgin/dev ,那麼遠程倉庫的中的dev分支就創建到本地了,那麼此時我們就可以在dev分支上面操作了
    • git push orgin dev : 修改完成之後推送到遠程倉庫中
  • 建立本地分支和遠程分支的關聯,使用git branch --set-upstream branch-name origin/branch-name
    • 如果遠程倉庫中有一個demo分支,本地也有一個demo分支,但是這個本地的demo分支並不是使用git checkout -b demo orgin/demo檢出的,而是直接創建的,那麼我們此時需要使用git pull拉取遠程倉庫中demo分支中的文件到本地的demo分支就會發現出現錯誤,因為沒有與遠程的demo分支關聯,此時我們就需要使用git branch --set-upstream demo orgin/demo

總結

因此,多人協作的工作模式通常是這樣:

  1. 首先,可以試圖用git push origin <branch-name>推送自己的修改;
  2. 如果推送失敗,則因為遠程分支比你的本地更新,需要先用git pull試圖合併;
  3. 如果合併有衝突,則解決衝突,並在本地提交;
  4. 沒有衝突或者解決掉衝突後,再用git push origin <branch-name>推送就能成功!

如果git pull提示no tracking information,則說明本地分支和遠程分支的鏈接關係沒有創建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>

標籤的使用

創建標籤

  • git tag v1.0 : 在當前分支上添加一個標籤
  • git tag -a v1.0 -m "備註資訊" : 添加一個標籤並且備註資訊
  • git tag : 列出當前分支上面的所有標籤

操作標籤

  • git tag -d v1.0 : 刪除指定的標籤
  • git push origin v1.0 : 推送標籤到遠程倉庫,因為標籤的創建不會自動推送到遠程,必須手動推送
  • git push orgin --tags : 一次性推送全部的標籤

刪除遠程標籤

  1. 先刪除本地標籤 : git tag -d v1.0
  2. 使用push刪除遠程標籤 : git push orgin :refs/tags/v1.0

添加所有文件

  • git add -A
  • 之後直接提交即可 : git commit -m ""