git基本使用教程

題外話

以前不了解git的時候,總感覺git是非常高大上的東西,很長一段時間都沒有接觸上。但后來用了一段時間后,發現git這個東西真是厲害啊,在厲害的同時它還這么地"接地氣",既能讓線上線下同步倉庫,多條分支工作,也能隨時fork別人的優秀的項目來參考學習,真是受用無比。我這人忘性比較高,為方便記憶,特意記錄下git 的基本使用。(ps:以下部分截圖來自廖雪峰老師的git教程)

正文筆記(以下內容針對windows平臺)

首先安裝git可以去git官網下載git for windows.

安裝好git后在任意一個目錄下右鍵選擇 git bash here

這里寫圖片描述

配置git的身份

就是如果你想克隆服務器上的倉庫,你得告訴別人你的身份

git config --global user.name <your_name>
git config  --global user.email <your_email>

創建版本庫

//learngit就是倉庫所在地方,你可以設為任意名字
mkdir learngit
cd learngit

空倉庫初始化

git init

[站外圖片上傳中...(image-ae70c0-1515859609638)]

這句命令會初始化空倉庫learngit,cd 進入 learngit,會發現多了個.git目錄,這個目錄是git用來跟蹤版本庫的,一般不要去碰它。

一般倉庫下都會有個README.md文件用來對倉庫進行必要的說明。


這里寫圖片描述

注意:在編輯README.md時不要用windows 自帶的記事本保存utf-8編碼的文件時會自動在文件頭部添加Oxefbbbf(十六進制)的字符。替代記事本:NotePad++,EditPlus,sublime Text3 等。

添加文件到git倉庫

//告訴git這是個要放到倉庫的文件,放在暫存區
git add README.md
/**
*提交到git倉庫,-m 后面是指該次提交的說明信息
*提交成功后會返回提示:多少個文件被提交,插入了多少行內容
*/
git commit -m "update README.md"

版本回退

git log 命令會顯示從最近到最久的提交日志,如果嫌輸出信息太多,可以在后面加上 --pretty=online參數

[站外圖片上傳中...(image-75ce58-1515859609638)]

git reset –-hard HEAD^ //HEAD表示當前版本,表示回退到上一個版本,^回退到上兩個版本,以此類推,太多數的話可以寫HEAD~100

也可以根據commit id號回退到特定的版本,沒必要寫全,寫幾個前面的數字就可以,git會自動尋找。

git reset --hard 3628164

現在總結一下:

  • HEAD指向的版本就是當前版本,因此,Git允許我們在版本的歷史之間穿梭,使用命令git reset --hardcommit_id
  • 穿梭前,用 git log 可以查看提交歷史信息,以便確定要回退到那個版本。
  • 要重返未來,用 git reflog 查看命令歷史,以便確定要回到未來的那個版本。

工作區與暫存區

工作區就是在電腦中能看到的目錄,比如learngit文件夾就是一個工作區。工作區里有一個隱藏目錄.git,這個不算工作區,而是Git的版本庫。

Git的版本庫里存了很多東西,其中最重要的即是稱為 stage(或者叫index)的暫存區,還有git為我們自動創建的第一個分支master,以及指向maser的一個指針叫HEAD

你可以簡單理解為,需要提交的文件修改通通放到暫存區,然后,此一次性提交到暫存區的所有修改。

比如,你對README.txt(或者README.md)進行修改一下,暫存區就會變成這樣:

這里寫圖片描述

一旦提交后,如果你沒有對工作區做任何修改,那么工作區就是“”干凈的“”!nothing to commit.

這里寫圖片描述

小結:

  • 暫存區是Git非常重要的概念,弄明白了暫存區,就弄明白了Git的很多操作到底干了什么。

管理修改

為什么Git比其他版本控制系統設計得優秀,因為Git跟蹤并管理的是修改,而非文件。每次修改,如果不 add 到暫存區,那就不會加到 commit 中。命令:

git add <something>
git commit -m "description"

撤銷修改

git checkout --README.txt //可以撤銷最近一次的修改

有兩種情況:

  1. README.txt自修改后還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態。

  2. README.txt已經添加到暫存區后,又作了修改,現在,撤銷修改就會回到添加到暫存區后的狀態。

刪除文件

eg:

git rm test.txt
git commit -m "delete test.txt"

如果是刪除了的話,可以用 git checkout -- test.txt 來恢復文件。

遠程倉庫

Github 專門提供 git 倉庫的托管服務 。

由于本地 git 倉庫和 github 倉庫之間的傳輸是通過 SSH 設置的,因此,需要設置一下 。

1.創建 SSH KEY

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

為什么 github 需要 SSH KEY 呢? 因為 github 需要識別出你推送的提交時你推送的,而不是別人冒充的,而 git 支持 SSH 協議,所以, github 只要知道了你的公鑰,就可以確認只有你自己才能推送。

2.添加SSH KEY 到 github 或 coding net

github

這里寫圖片描述

coding net

這里寫圖片描述

添加遠程倉庫

1.將本地的內容推送關聯到 github 倉庫

git remote add origin git@github.com:your_usename/repos_name.git

注意賬戶名不要寫錯,添加后,遠程庫的名字就是origin,這是 git 的默認叫法,也可以改成別的。

2.將本地庫的所有內容推送到遠程庫上。

把本地庫的內容推送到遠程,用 git push 命令,實際上是把本地的 master 推送到遠程倉庫。

git push -u origin master

如果遠程倉庫是空的,第一次推送 master 分支時,加上了 -u 參數, git 不但會把本地的 master 分支內容推送的遠程到遠程新的 master 分支,還會把本地的 master 分支 和遠程的 master 分支關聯起來,在以后的推送或者拉取時間時就可以簡化命令。

若要刪除遠程倉庫的關聯,可以用命令: git remote rm hello-world.git

這里寫圖片描述

從遠程倉庫克隆

git clone git@github.com:your_username/repos_name.git

小結:

  • 要克隆一個倉庫,首先必須知道倉庫的地址,然后使用 git clone 命令克隆。
  • git 支持多種協議,包括 https ,但通過 ssh 支持的原生 git 協議才最快

分支管理

分支可以創建屬于個人的工作空間,開發完畢后再一次性合并到原來的分支上,這樣安全又不影響別人工作。

創建與合并分支

在 git 中, master 分支也叫主分支,HEAD 嚴格來說不是指向提交,而是指向 master

首先,創建 dev 分支,然后切換到 dev 分支
git checkout -b dev ,這個命令相當于:

git branch dev
git checkout dev

可以用 git branch 來查看分支,當前分支前面會出現一個"*"號;

git checkout dev 切換分支,回到 master 分支

合并分支: git merge dev ,把 dev 分支修改的內容合并到 master 分支上。

合并完成后,便可以放心刪除 dev 分支。

這里寫圖片描述

解決沖突

假設這種情況:新建一個分支 future,修改 readme.txt 內容后提交;切換回 master 分支又修改 readme.txt 內容后提交;

[站外圖片上傳中...(image-d52db4-1515859609639)]

這種情況下,git 無法執行 "快速合并",只能試圖把各自修改合并起來 ,但這種合并可能會有沖突。

這里寫圖片描述

果然沖突了,git 告訴我們, readme.txt 文件存在沖突,必須手動解決再提交, git status 可查看沖突的文件。

只能手動修改,git用 <<<<<<<,=======,>>>>>>標記處不同分支的內容。修改保存再提交。

這里寫圖片描述

可見沖突解決了。

小結:

  • 當 git 無法自動合并分支時,就必須首先解決沖突,解決沖突后,再提交,合并完成。用 git log
    --graph命令可以看到分支合并圖。

分支管理策略

一般合并分支時,git 會用 fast forward模式,這種模式下,刪除分之后會丟掉分支的信息,如果要強制禁用 Fast Forward 模式,git 就會在 merge 時生成一個新的 commit,這樣,從分支歷史上就可以看出分支信息。

git merge --no-ff -m "merge with no-ff" dev

因為這個合并要創建一個新的 commit ,所以加上 -m 參數,把 commit 描述寫進去。合并用 git log 查看操作信息。

git log --graph --pretty=online --abbrev-commit 

[站外圖片上傳中...(image-d52d31-1515859609639)]

Bug分支

軟件開發過程中遇到 bug 時可以新建一個分支來修復,修復完成后,合并分支,然后將臨時分支刪除。

那現場的工作怎么辦?git 提供了一個 stash 功能,可以把當前工作現場儲藏起來,等以后恢復現場后繼續工作。

git stash

修復 bug 后,返回之前的分支

git stash list

查看之前的工作現場。
恢復現場:

git stash apply
git stash drop
//或
git stash pop

推送分支

推送分支,就是把該分支上的所有本地提交都推送到遠程庫。推送時,要指定本地分支,這樣,git 就會把該分支推送到遠程倉庫對應的分支上。

git push origin master
//或
git push origin dev

bug 分支只用于在本地修復 bug ,就沒必要推到遠程倉庫了。

END

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1.git的安裝 1.1 在Windows上安裝Git msysgit是Windows版的Git,從https:/...
    落魂灬閱讀 12,705評論 4 54
  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,715評論 9 163
  • 濱戲 婊子無情,戲子無義 因為她們都是在演戲 呻吟和哭泣是職業需要 不要被偽裝蒙敝 人生的舞臺上大家 都在演戲 也...
    5988閱讀 217評論 0 0
  • 片頭:他不敢望向繁華的都市。孤獨與落寞充斥他的雙眼,但他明...
    三秋予遲閱讀 500評論 0 2
  • 許先生的立夏書 1. 在夏快要過去的尾聲里。 我婉拒了前公司表示挽留我的提議,找了一家不甚起眼的報社做文字編輯。小...
    谷谷閱讀 4,023評論 101 91