git 速成筆記

git的特點:
1. 速度快
2.設計簡單
3.對非線性開發模式強力支持(允許成千上萬個並行開發的分支)
4.完全分佈式

使用git要首先安裝git
查看本機有沒有安裝git ,可以使用命令 git 。
如果沒有安裝git需要先下載安裝git,安裝git之後需要配置本地用戶信息(注意這一步是很有必要的,否則進行後續操作時會報錯)。
git config --global user.name "wenruo"
git config --global user.email "[email protected]"

開始創建本地倉庫
新建目錄文件
mkdir learngit //命令新建文件,當然也可以手動創建
cd learngit // 切到當前目錄下
進行初始化當前倉庫 , 執行命令 git init 一個空的倉庫就已經創建好了.



這時候仔細觀察當前目錄下已經生成了一個.git的文件。當然也有可能該文件被自動隱藏了,你需要
進行某些操作:
控制面板 --> 文件夾選項 -- >查看

選擇顯示隱藏的文件。再回到之前的learngit文件夾就可以看到.git 文件了


注意請不要試圖修改.git 文件 ,因爲這是一個版本記錄的文件,若被修改就無法保證爲你提供正常的版本控制功能了。

現在我們要開始在自己的倉庫內做一些事情了。
新建test.txt
git add test.txt // 將 test.txt 加入到緩存區 (沒有提示證明操作成功了)

git commit -m "create an empty file" // 將文件從暫存區提交到本地倉庫,-m 代表的意思是本次提交的一些操作描述 。操作成功後出現如下提示:



現在text.txt 文件已經被成功提交到我們的倉庫裏邊了 。 不過我現在想要對它進行修改,因爲它現在沒有內容。 打開test.txt 隨便寫入點內容,例如“hello everyone , today is a good day.”

然後執行git 命令 git status 顯示如下:


git status 的作用: 查看倉庫狀態 ,建議每次在執行git 操作之前先使用 git status 查看一下當前倉庫狀態,方便後續操作.

changes not staged for commit 指的是我們當前的文件修改並沒有被添加到緩存工作區.
no changes added to commit 說明我們當前緩存區裏邊並沒有文件修改,所以不需要進行commit提交

所以我們現在要做的是先把修改後的文件添加到緩存區. 執行命令 git add test.txt
操作完成後我們再執行命令,git status 查看當前文件狀態


changes to commited 這句話意思是緩存區內容有更改了,需要向本地倉庫進行提交.

提交更改文件到本地倉庫 git commit -m "wrote some things in test.txt" 提交成功顯示如下


再次修改test.txt 文件 ,隨便添加點什麼內容,同時在當前目錄下新建一個new.txt 的文件(可以什麼都不寫,也可以隨便添加點什麼內容)

現在我的工作區有了兩個文件發生了更改。 我們可以依次將這兩個文件添加到暫存區,也可以一次性將所有變化的文件添加到暫存區。 使用命令: git add -A
然後將暫存區內文件提交到本地倉庫 。 git commit -m "change text.txt and created new.txt"


修改一下test.txt 文件,隨便寫一些內容,然後執行命令 git diff test.txt , 可以查看哪些內容被修改了。

執行命令
git add test.txt
git commit -m "learn git diff"

查看提交記錄 ,執行命令 git log

但是這樣顯示的比較亂 , 我們可以更改一下顯示形式。執行命令 git log --pretty=oneline

上邊的內容看起來直觀了許多,左邊的一長串字符代表版本的索引編號 。

git reset --hard HEAD^ 是將文件切換到上一個版本。 要切換到上上個版本就使用命令 git reset --hard HEAD^^ 如果要回退的版本比較多可以使用 git reset --hard HEAD~n. n代表要回退的版本數量。 但這使用起來似乎也不是很方便,我們希望使用時可以直接切換到我們想要的版本,可以使用以下命令:

git reset --hard bb461c7 後邊的編碼代表的是要切換到的版本號(一般情況下我們不需要將版本號寫全,只需要寫前幾位)。這樣我們就切換到了 wrote some things in test.txt 這個版本 .

這時候再次執行 git log --pretty=oneline 命令查看當前版本記錄

此時只顯示了前兩次提交的記錄,那我們後邊提交的內容都被刪除掉了嗎 ? 其實不是的,我們如何再回到後邊提交的版本呢 。

執行命令 git reflog 可以顯示我們的所有命令操作 。 前邊的版本索引可以幫助我們回到想要操作的版本文件。

執行命令 git reset --hard 72b5d1f 切換到 learn git diff 版本 .


現在重新查看當前所有提交信息 git log --pretty=oneline, 所有狀態恢復如初


關於工作區、暫存區和本地倉庫的關係如下:


1. 我們文件的修改操作是在工作區進行的 。

2. 文件修改完成後需要執行 git add 將文件添加到暫存區 。


3. 用 git commit 提交實際是將文件提交到本地倉庫(本地master分支)


1. 當你改亂了工作區某些文件中的內容,想直接丟棄工作區的修改時 ,可以執行命令
git checkout -- "filename"

2. 若改亂了文件內容同時提交到了 暫存區 , 可以執行命令:
git reset HEAD "filename" 然後再執行 git checkout -- "filename"

3. 若已經提交了不是適合修改的內容到本地倉庫,可以使用版本回退或版本回退 。

如何將本地庫內容推送到遠程倉庫?

使用git 遠程倉庫功能需要藉助GitHub網站 , 首先你需要有一個github上的賬號,假如沒有的話請先註冊一個 。

因爲本地倉庫和GitHub倉庫之間的傳輸是通過ssh加密的,所以需要進行一些設置:
創建SSH Key , 在git Bash 中輸入如下命令:

ssh-keygen -t rsa -C "[email protected]"

此時在用戶主目錄(C:\Users\Administrator)裏邊就可以找到 .ssh 目錄 . 裏邊會有 id_rsa id_rsa.pub 兩個文件 。 登陸GitHub,打開“Account settings”“SSH Keys”頁面:
然後,點“Add SSH Key”,填上任意Title,在Key文本框裏粘貼id_rsa.pub文件的內容:


新建一個GitHub倉庫 , create repository . ( 假設新倉庫名字爲learngit )
當然現在github上建好的倉庫是空的,我們可以從這個倉庫克隆出新的倉庫,也可以把一個已有的倉庫與之關聯 ,然後把本地倉庫內容推送到GitHub倉庫 。
在本地倉庫目錄下運行命令:

git remote add origin [email protected]:hello/learngit.git

注意上邊命令中 hello 是自己在本機配置的user.name . 這樣我們的這個本地倉庫就和GitHub上名爲learngit的倉庫遠程關聯了。不過仍需要執行推送命令,本地倉庫的內容纔會被更新到遠程倉庫 。
執行命令: git push -u origin master
由於遠程庫是空的,我們第一次推送master 分支加上 -u 參數 , git 不但會把本地master分支推送到遠程新的master分支,同時還會降這兩個分支做關聯 ,以後做推送或拉取時就可以簡化命令 。
以後再從這個分支推送內容時只需要執行命令:
git push origin master

將某個分支推送到遠程分支需要 在推送命令後加上分支名字, 如推送master分支:
git push origin master
推送 dev分支 執行命令: git push origin dev

要關聯一個遠程庫,使用命令 git remote add origin git@server-name:path/repo-name.git; 關聯後,使用命令 git push -u origin master 第一次推送master分支的所有內容;此後,每次本地提交後,只要有必要,就可以使用命令 git push origin master 推送最新修改;

克隆一個遠程倉庫到本機, 只需要找到該項目的遠程倉庫地址:執行如下命令

注意上邊的地址換成自己想要克隆的倉庫的地址 。

git 支持多種協議,包括 https,但通過 ssh 支持的原生 git 協議速度最快。因此上邊的克隆命令你還可以換爲 : git clone [email protected]/GeekHi/gitskill.git

創建新分支 :
git checkout -b dev // 創建並切換到 dev分支

可以使用 git branch 命令查看本地倉庫所有分支,* 代表當前所用分支 。

修改test.txt 文件內容,隨便添加些內容 。

提交:
git add test.txt
git commit -m "learn branch"

切換回master 分支:
git checkout master

打開test.txt 文件查看文件內容,還是沒有被修改過的版本 。

合併 master 和 dev 分支:
git merge dev // merge 命令用於合併指定分支到當前分支
此時查看test.txt 文件內容是被修改過後的 。

查看當前分支:

刪除分支:
git branch -d dev // 用於刪除dev分支

查看分支:

分支操作常用命令彙總:

查看分支: git branch

創建分支:git branch <name>

切換分支:git checkout <name>

創建 + 切換分支: git chekout -b <name>

合併某分支到當前分支: git merge <name>

刪除分支:: git branch -d <name>

再次創建並切換新的分支: git checkout -b bran1

修改test.txt 最後一行 , 任意寫一些內容 .

提交文件:

切換到master 分支

修改test.txt 最後一行的內容,修改成任意內容 。然後提交

此時你可能會意識到,現在這兩個分支上的文件內容實際上是有了衝突 。

此時執行合併命令,將bran1 分支合併到當前master分支會看到以下內容:

系統提示執行merge命令失敗,在test.txt 文件中有存在衝突,需要先解決衝突內容纔可進行提交 。

我們打開test.txt 文件會看到如下顯示:


git 自動在衝突文件中做了標識, 將兩個分支上衝突內容都標記在了文件中。我們只需要刪除最後一行,或者寫成bran1分支版本的內容然後重新進行add和commit 操作就可重新進行合併 。


當然,現在bran1分支也可以進行刪除了:

使用命令 git log --graph 你可以查看分支合併圖 。

分支可以被創建出來用來單獨處理某些bug,我們一般開發不會直接在master分支進行,而是會創建一個新的dev分支,在dev分支上開發完畢後切換到mater分支,將兩個分支代碼進行合併 。

當你需要新建一個分支去單獨處理某些bug時,你需要將現在正在開發使用的dev分支暫存起來 。執行命令 git stash .
切換到master 分支 git checkout master
創建並切換到 bug 專用 分支 git checkout -b branch-issue
當在branch-issue 分支開發完畢後,執行 add 和 commit 命令 將修改過的內容提交。
切換到master分支 git checkout master
合併branch-issue 分支到當前分支: git merge branch-issue
刪除bug分支: git branch -d branch-issue
恢復stash 存儲 : git stash pop

如果要丟棄一個沒有被合併過的分支可以使用命令: git branch -D <name> // 強制刪除

多人協作的工作模式:

1. 首先,可以試圖用 git push origin branch-name 推送自己的修改;

2. 如果推送失敗,則因爲遠程分支比你的本地更新,需要先用 git pull 試圖拉取遠程代碼到本地,將內容進行合併

3. 如果合併有衝突,則解決衝突,並在本地提交;

4. 沒有衝突或者解決掉衝突後,再用 git push origin branch-name 推送就能成功!

爲了方便版本的識別和管理,我們還可以給不同版本加上標籤。

爲當前操作的版本添加一個名字使用命令:
git tag <name>

當然你還可以具體指定某個版本的名字,需要在命令中使用版本索引,例如
git tag v0.2 6223431 這個命令就是爲 版本索引爲6223431的 版本添加版本名稱 .

當然也可以刪除這個版本的標籤名,使用命令:
git tag -d v0.2 刪除標籤名爲0.2的標籤名 。 標籤名只是在本地存儲的,不會被推送到遠程倉庫。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章