Git使用總結
- 2019 年 12 月 31 日
- 筆記
文章目錄
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 remote add [email protected]:chenjiabing666/LearnGit.git
遠程倉庫的使用
常用命令
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 add learn [email protected]:chenjiabing666/LearnGit.git
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
- 對於一些需要合作完成的分支需要推送到遠程倉庫,並不是所有的分支都需要推送到遠程倉庫的
抓取分支
- 在多人協作完成項目的時候,都需要向
主分支master
和dev分支
上面推送各自的修改 - 我們使用
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
- 如果遠程倉庫中有一個
總結
因此,多人協作的工作模式通常是這樣:
- 首先,可以試圖用
git push origin <branch-name>
推送自己的修改; - 如果推送失敗,則因為遠程分支比你的本地更新,需要先用
git pull
試圖合併; - 如果合併有衝突,則解決衝突,並在本地提交;
- 沒有衝突或者解決掉衝突後,再用
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
: 一次性推送全部的標籤
刪除遠程標籤
- 先刪除本地標籤 :
git tag -d v1.0
- 使用
push
刪除遠程標籤 :git push orgin :refs/tags/v1.0
添加所有文件
git add -A
- 之後直接提交即可 :
git commit -m ""