Git入門與開發

大白菜發表於2018-10-26

從頭開始複習git,熟悉git常見指令,安裝,操作等

參考廖雪峰的教程

廖雪峰git教程

安裝

Mac

有兩種方法

  • brew安裝git

brew官網

brew使用教程

  • Xcode安裝git

Xcode7.0後的版本預設安裝了git,在終端直接輸入git,看是否已安裝。

Windows

git官網

命令

建立版本庫

git init 建立倉庫

git add file 新增到git中(放入暫存區)

git add . 一次性全部新增到暫存區

git commit -m `commit description` 提交修改好的檔案到本地

git log 列印提交日誌

git log —oneline 列印提交日誌的簡寫版

版本管理

git reset —hard HEAD^ 回滾到上一個版本(HEAD代表當前版本,HEAD^代表上一個版本,HEAD^^代表上兩個版本,依次類推)

git reflog 檢視使用者所有的提交記錄

git reset —hard 1231234(提交id)回滾到1231234的提交版本

git checkout — file 放棄工作區中對file檔案的修改,不論暫存區是否有該檔案的修改記錄,即該命令不會放棄暫存區的修改,只放棄工作區的修改

git reset HEAD file 放棄暫存區的內容(即放棄上一次add的內容),退回到工作區,此時的工作區並不是最新版本,而是在最新版本的基礎上使用者修改過的內容

關聯遠端倉庫

已github為例,假設有兩種情況:

1.本地已有git倉庫或專案檔案,想在github進行關聯

  • 在github新建專案,不要勾選Initialize this repository with a README,預設建立即可
  • 關聯github,在本地倉庫終端輸入git remote add origin git@github.com:dwfrost/GitStudy.git ,注意origin後的內容(SSH)可以從github上覆制
  • 推送內容到github git push -u origin master

2.本地是空檔案,想從已有的github專案克隆

  • 開啟github專案,複製SSH
  • 在本地倉庫終端輸入git clone git@github.com:dwfrost/GitStudy.git
  • 如果是加入已有的專案,需要檢出目標分支到本地,以便推送時本地分支和遠端分支同名

git remote rm origin 刪除已關聯的遠端倉庫(一般用不到)

git remote 檢視關聯的遠端倉庫

一個本地庫可以同時關聯github和碼雲:

git remote add github git@github.com:dwfrost/GitStudy.git

git remote add gitee git@gitee.com:dwfrost/GitStudy.git

注意,遠端倉庫名稱不是origin

然後分別推送

git push github dev

git push gitee dev

分支管理

git branch 檢視當前所在的分支

建立

git branch dev 建立dev分支

切換

git checkout dev 切到dev分支

git checkout -b dev 建立並切換到dev分支

合併

git merge dev 將dev分支合併到當前分支

刪除

git branch -d dev 刪除dev分支(合併後才能刪除,且當前分支不能為dev)

git branch -D dev 沒有合併時,強制刪除dev分支

暫存

git stash 將修改內容(stash)移到貯藏區

git stash list 檢視貯藏區的內容(stash)

恢復貯藏區有2種辦法:

1.git stash apply恢復貯藏區,但貯藏區依舊保留修改內容(stash),如果想刪除,使用git stash drop

2.git stash pop恢復貯藏區的同時刪除修改內容(stash)

推送

git push origin dev 將dev分支推送到遠端倉庫(origin)的dev分支上

標籤管理

git tag v1.0 新建標籤

git tag 檢視標籤

git show v1.0 檢視標籤資訊

git tag v0.9 7ff4f56 給某次提交打上標籤

git tag -a v0.9 -m "version 0.9 released" 7ff4f56 -a後面是標籤名,-m後面是標籤說明

git tag -d v1.0刪除標籤

git push origin v1.0 推送標籤到遠端

git push origin --tags 一次性推送全部標籤

git push origin :refs/tags/v1.0 刪除遠端標籤(要先刪本地)

新增SSH

常見的遠端倉庫有github,碼雲等,為了方便本地和遠端提交程式碼,需要配置SSH加密,如下:

1.建立SSH key。

建立前,看一下有沒有。在使用者目錄下(mac),終端輸入ls -ah檢視隱藏檔案,發現存在.ssh資料夾,cd .ssh->open .,看到存在id_rsaid_rsa.pub兩個檔案,說明已經有了SSH key。

如果沒有,就需要建立。

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

一路回車,建立成功。

2.新增公鑰

id_rsa:金鑰是使用者保管的

id_rsa.pub:公鑰是放在遠端倉庫,用於和金鑰配對使用。

複製id_rsa.pub檔案中的內容,開啟github,在賬戶管理選項中新增SSH key。

概念

工作區

工作區就是git能夠管理到的工作區域,也就是該倉庫下的所有檔案,包括正在修改的和已經存在的檔案。

暫存區

暫存區是git記錄的修改狀態,使用者在工作區修改檔案後,可以用git add file將檔案修改放入暫存區。

注意,如果使用者沒有把修改操作放入暫存區,然後直接提交,那git是不會提交使用者的操作的,git只提交暫存區中的修改操作。所以在開發過程中,我們通常如下操作:

* 寫程式碼,寫程式碼……

 * 一個小功能或模組完成,直接提交

 * 如果程式碼不多,先放入暫存區,然後接著寫程式碼
 * 覺得ok了,放入暫存區,不ok千萬別放

* 所有的改動一次性提交

另外,如果暫存區存在檔案,是不能直接pull的。如果工作區存在修改檔案,可以pull程式碼。

配置

.gitignore

有些檔案的變動或者資訊是不需要提交的,比如node_modulesdist以及系統產生的垃圾檔案等。示例如下:

# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini

# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build

# My configurations:
db.ini
deploy_key_rsa

配置別名

git config --global alias.st status 全域性配置,用st代替status

去掉--global,那配置別名的檔案存在於本倉庫的.git/config中。

全域性配置的檔案在使用者主目錄下的隱藏檔案.gitconfig中。

如果想刪除別名,直接刪除[alias]下對應的行即可。

舉個例子

刪除檔案

  • git rm file 相當於 rm file,然後git add file
  • 是否真的刪除?
  • 是,git commit -m `delete file`
  • 否,git reset HEAD file + git checkout -- file

多人協作

  • 檢視遠端庫資訊,使用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;如果使用sourcetree,右鍵origin,選擇檢出分支,即可在本地複製遠端分支。
  • 從遠端抓取分支,使用git pull,如果有衝突,要先處理衝突。

相關文章