首頁 > 軟體

Git命令設定學習筆記

2020-06-16 16:26:00

Git 筆記

  • Git是分散式版本控制系統
  • 集中式VS分散式:
    1. 集中式版本控制系統,版本庫集中存放在中央伺服器,必須要聯網才能工作,沒有歷史版本庫。
    2. 分散式版本控制系統,版本控制系統沒有“中央伺服器”,每個人電腦上都是一個完整的版本庫。
    3. 分散式系統優勢:安全性更高,不需要聯網,如果中央伺服器故障,任何其他一個開發人員的本地都有最新的帶有歷史記錄的版本庫。
  • 主要區別在於歷史版本庫的存放,集中式系統歷史版本只存在於中央伺服器,而分散式控制系統中每個本地庫都有歷史記錄存放。

Git命令

Git設定

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"  

注意git config命令的--global引數,用了這個引數,表示你這台機器上所有的Git倉庫都會使用這個設定,當然也可以對某個倉庫指定不同的使用者名稱和Email地址。

建立版本庫

在當前目錄建立git倉庫

$ git init 

把檔案新增到倉庫

$ git add <file>
$ git commit

git add可以反復多次使用,新增多個檔案,git commit可以一次提交很多檔案,在git commit命令後新增(-m '····')方便從歷史記錄裡找到修改記錄。

掌握工作區的狀態

$ git status 

檢視檔案修改內容

$ git diff

版本回退

$ git reset -- hard HEAD^

HEAD指向的版本是當前版本,回到上一版本使用以上命令,如果回退上兩個版本使用HEAD^^,如果回退版本數較大(如往上50個版本),使用HEAD~50

回退指定版本

$ git reset --hard commit_id

commit_id是指定版本號,是由SHA1計算出來的數位

檢視提交歷史

$ git log   

檢視命令歷史

$ git reflog

工作區、暫存區和版本庫

git與其他版本控制系統的不同之處就是有暫存區的概念,工作區就是電腦中能看到的目錄,工作區有一個隱藏目錄[.git],這是git的版本庫。版本庫裡有許多東西,最重要的是稱為stage的暫存區。

將檔案往版本庫裡新增時是分兩步執行的:

  1. 第一步是用git add把檔案新增進去,實際上就是把檔案修改新增到暫存區。
  2. 第二步是用git commit提交修改,實際上就是把暫存區的所有內容提交到當前分支。

Git是如何跟蹤修改的,每次修改,如果不用git add到暫存區,那就不會加入到commit中。

復原修改

丟棄工作區的修改

$ git checkout -- <file>

該命令是將檔案在工作去的修改全部復原,這裡有兩種情況:

  • 一種是file自修改後還沒有被放到暫存區,現在,復原修改就回到和版本庫一模一樣的狀態;
  • 一種是file已經新增到暫存區後,又作了修改,現在,復原修改就回到新增到暫存區後的狀態。

總之,就是讓這個檔案回到最近一次git commit或git add時的狀態。

丟棄暫存區的修改

改亂了工作區某個檔案的內容同時還新增到了暫存區,想丟棄修改時,先使用命令git reset HEAD <file>,之後按復原工作區修改進行操作。

進行了commit命令提交的修改

已經提交了不合適的修改到版本庫時,想要復原修改,使用版本回退命令,前提是沒有推播到遠端庫.

刪除檔案

$ git rm <file>

當你要刪除檔案text.txt的時候,可以採用命令:rm test.txt
這個時候有兩種情況:

第一種情況:的確要把test.txt刪掉,那麼可以執行
$ git rm test.txt
$ git commit -m "remove test.txt"
此時檔案被刪除,且刪除記錄上傳本地庫。

第二種情況:誤刪檔案,想恢復,這時候還沒有commit -m "remove test.txt",執行git checkout test.txt將檔案恢復。

如果執行完git commit -m "remove test.txt"後就不能用checkout恢復了,得用git reset --hard HEAD^,再從版本庫寫回到工作區。
git rm用於刪除一個檔案。如果一個檔案已經被提交到版本庫,那麼你永遠不用擔心誤刪,但是要小心,你只能恢復檔案到最新版本,你會丟失最近一次提交後你修改的內容。

遠端倉庫

建立SSH Key

$ ssh-keygen -t rsa -C "youremail@example.com"

關聯遠端倉庫

$ git remote add origin https://github.com/username/repositoryname.git

推播到遠端倉庫

$ git push -u origin master

-u 表示第一次推播master分支的所有內容,此後,每次本地提交後,只要有必要,就可以使用命令$ git push origin master推播最新修改。

從遠端克隆

$ git clone https://github.com/usern/repositoryname.git

注意:當你不能使用 git@github.com 命令來進行推播和克隆,是因為沒有安裝金鑰。

  • 新增私秘鑰到$ ssh-add ~/.ssh/id_rsa
  • 如果新增失敗可以先執行命令$ eval ssh-agent是~鍵上的那個符號,然後再次新增私秘鑰。
  • $ ssh -T git@github.com判斷是否係結成功。如果返回successfully表示成功。

分支管理

檢視分支

$ git branch

建立分支

$ git branch <name>

切換分支

$ git checkout <name>

建立+切換分支

$ git checkout -b <name>

合併某分支到當前name分支

$ git merge <name>

刪除分支

$ git branch -d <name>

強行刪除分支

$ git branch -D <name>

如果要丟棄一個沒有被合併過的分支,可以通過以上命令來實現。

檢視分支合併圖

$ git log --graph

當Git無法自動合併分支時,就必須首先解決衝突。解決衝突後,再提交,合併完成。
git log --graph命令可以看到分支合併圖。

普通模式合併分支

$ git merge --no-ff -m "description" <branchname>

通常進行分支合併時,git會使用Fast forward模式,刪除分支後,分支資訊會丟失,可以使用--on-ff引數,禁用Fast forward,需要時加上一個-m引數把commit描述寫進去。這樣進行合併後的歷史有分支,能看出來曾經做過合併。

儲存工作現場

$ git stash  

檢視工作現場

$ git stash list

恢復工作現場

$ git stash pop

在新建分支中修改bug時的推薦操作

首先理清兩個概念:
未被追蹤的檔案:指的是新建的檔案或資料夾且還沒加入到暫存區(新建的還沒有被git add)
未加入到暫存區的檔案:指的是已經被追蹤過,但是沒有加入到暫存區(已經執行過git add/commit的但是這次修改後還沒有git add)
舉例:
readme.md 已經被git add/git commit過,但是呢,我這次只是修改了,而且沒有修改完,不能commit;
test 新建的資料夾,沒有被git add/git commit;
有個bug需要處理,這時候我需要切換分支,去處理bug
正確的步驟:
git add test(讓git去追蹤這個新檔案)
git stash保留現場
如果不執行這兩個命令,那麼在修改BUG完成之後git status,就會發現readme.md沒有新增到暫存區,同時又多了個test檔案,
但是自己的readme.md沒有完成,萬萬不可以提交,這樣導致bug的修改程式碼也提交不了。
所以需要git stash,這樣在提交修改bug程式碼的時候 ,就不會看見readme.md 和 test。可以安心提交修改bug的程式碼。

檢視遠端庫資訊

$ git remote -v;

本地新建的分支如果不推播到遠端,對其他人就是不可見的;

從本地推播分支

$ git push origin branch-name

如果推播失敗,先用git pull抓取遠端的新提交;

在本地建立和遠端分支對應的分支

$ git checkout -b branch-name origin/branch-name

本地和遠端分支的名稱最好一致;

建立本地分支和遠端分支的關聯

$ git branch --set-upstream branch-name origin/branch-name

從遠端抓取分支

$ git pull

如果有衝突,要先處理衝突。

標籤

git標籤是版本庫的快照,實際就是某個commit的指標,如果要找到某次版本的commit號,數位複雜不好找,使用tag取一個易於記住和理解的名字就方便許多,它跟某個commit綁在一起。(類似於域名和IP地址的關係?)

新建標籤

$ git tag<tagname> 

預設為HEAD,也可以指定一個commit id。

檢視標籤資訊

$ git show <tagname>

建立帶有說明的標籤

$git tag -a <tagname> -m <description> <branchname> or commit_id

用-a指定標簽名,-m指定說明文字

檢視所有標籤

$ git tag

推播某個標籤到遠端

$ git push origin <tagname>

一次性推播全部尚未推播到遠端的本地標籤

$ git push origin --tags

刪除一個本地標籤

$ git tag -d <tagname>

刪除一個遠端標籤

$ git push origin :refs/tags/<tagname>

IT145.com E-mail:sddin#qq.com