學習廖雪峯git教程個人筆記

1.安裝git

從Git官網直接下載安裝程序,
安裝完成後,在開始菜單裏找到“Git”->“Git Bash”,蹦出一個類似命令行窗口的東西,就說明Git安裝成功
設置一下帳號和郵箱

$ git config --global user.name trump
$ git config --global user.email [email protected]

–global參數,用了這個參數,表示你這臺機器上所有的Git倉庫都會使用這個配置

2. 創建版本庫

$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit

通過git init命令把這個目錄變成Git可以管理的倉庫
細心的讀者可以發現當前目錄下多了一個.git的目錄,這個目錄是Git來跟蹤管理版本庫的,沒事千萬不要手動修改這個目錄裏面的文件,不然改亂了,就把Git倉庫給破壞了。
如果你沒有看到.git目錄,那是因爲這個目錄默認是隱藏的,用ls -ah命令就可以看見
文件格式:
所有的版本控制系統,其實只能跟蹤文本文件的改動,編碼強烈建議使用標準的UTF-8編碼

3.編寫文本文件(帶有版本控制系統)

  • 在前面創建好版本庫的目錄下新建txt文件…編寫內容
  • git add readme.txt
  • git commit -m “介紹”

4.如何進行版本控制

git status

命令可以讓我們時刻掌握倉庫當前的狀態,上面的命令輸出告訴我們,readme.txt被修改過了,但還沒有準備提交的修改

git diff

這個命令可以讓我們查看本地的txt文件裏面的內容和上一次add&commit的txt文件裏面的內容的差異
總結:
1,要隨時掌握工作區的狀態,使用git status命令。
2,如果git status告訴你有文件被修改過,用git diff可以查看修改內容

5.如何版本控制2

0.前提是add/commit過
1.git log查看版本控制系統變更的歷史記錄,git log命令顯示從最近到最遠的提交日誌
升級版

$ git log --pretty=oneline

顯示:從最近到之前的commit id(版本號)以及修改備註文字
2.回退到上一個版本

git reset --hard Head~

3.回退到指定版本

git reset --hard 版本號(commit id) 寫出開頭即可

4.穿越到以前了.找不到後面的操作記錄了怎麼辦
要重返未來,用git reflog查看命令歷史,以便確定要回到未來的哪個版本

git reflog

6.如何版本控制3 工作區 緩存區

定義
工作區Working Directory: 文件夾

版本庫Repository: git的版本庫
版本庫包括
1)stage(index)暫存區
2)分支(master)
3)指針(Head)
在這裏插入圖片描述
git add命令實際上就是把要提交的所有修改放到暫存區(Stage),
然後,執行git commit就可以一次性把暫存區的所有修改提交到分支
執行commit以後
$ git status 查看工作區是否乾淨!

7.如何版本控制4 管理修改

在這裏插入圖片描述
結果是隻提交第一次修改
正確的做法是
在這裏插入圖片描述

git commit

只負責把暫存區的修改提交了,也就是第一次的修改被提交了,第二次的修改不會被提交

git diff HEAD -- readme.txt

查看工作區和版本庫裏面最新版本的區別

git diff

查看工作區和暫存區(stage)的區別

在這裏插入圖片描述
git diff : 對比工作區(未 git add)和暫存區(git add 之後)
git diff --cached: 對比暫存區(git add 之後)和版本庫(git commit 之後)
git diff HEAD: 對比工作區(未 git add)和版本庫(git commit 之後)

8.如何版本控制5 撤銷修改

git checkout -- file

可以丟棄工作區的修改:
1,是readme.txt自修改後還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態
2,是readme.txt已經添加到暫存區後,又作了修改,現在,撤銷修改就回到添加到暫存區後的狀態
針對第二種情況,如果想恢復,則使用下方代碼

git reset HEAD <file>

說明:可以把暫存區的修改撤銷掉(unstage),重新放回工作區
然後,stage暫存區就乾淨了,工作區有修改

$ git checkout -- readme.txt

丟棄工作區的修改

git status

clean清靜了

9.如何版本控制9 刪除

刪除文件方法1:直接手動刪除
刪除文件方法2:代碼刪除

$ rm test.txt

上面的代碼刪除了工作區的文件
接着

$ git status

查看版本庫和工作區的差異
然後有兩種選擇:

選擇一:從版本庫刪除文件

$ git rm test.txt
$ git commit -m "remove test.txt"

選擇二:從版本上恢復工作區的文件

$ git checkout -- test.txt

10.遠程倉庫

Git是分佈式版本控制系統
GitHub提供Git倉庫託管服務的,所以,只要註冊一個GitHub賬號,就可以免費獲得Git遠程倉庫
本地Git倉庫和GitHub倉庫之間的傳輸是通過SSH加密的,設置如下:
在用戶主目錄下,看看有沒有.ssh目錄,如果有,再看看這個目錄下有沒有id_rsa和id_rsa.pub這兩個文件,如果已經有了,可直接跳到下一步。如果沒有,打開Shell(Windows下打開Git Bash),創建SSH Key:

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

在這裏插入圖片描述
在用戶主目錄裏找到.ssh目錄,裏面有id_rsa和id_rsa.pub兩個文件,這兩個就是SSH Key的祕鑰對,id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。

第2步:登陸GitHub,打開“Account settings”,“SSH Keys”頁面:

然後,點“Add SSH Key”,填上任意Title,在Key文本框裏粘貼id_rsa.pub文件的內容:

爲什麼GitHub需要SSH Key呢?因爲GitHub需要識別出你推送的提交確實是你推送的,而不是別人冒充的,而Git支持SSH協議,所以,GitHub只要知道了你的公鑰,就可以確認只有你自己才能推送。

當然,GitHub允許你添加多個Key。假定你有若干電腦,你一會兒在公司提交,一會兒在家裏提交,只要把每臺電腦的Key都添加到GitHub,就可以在每臺電腦上往GitHub推送了。

情境1:github遠程倉庫創建
首先,登陸GitHub,然後,在右上角找到“Create a new repo”按鈕,創建一個新的倉庫…在Repository name填入learngit,其他保持默認設置,點擊“Create repository”按鈕,就成功地創建了一個新的Git倉庫learngit
情景2:把本地的git庫關聯github遠程倉庫

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

情景3:第一次把本地庫的所有內容推送到遠程庫上

$ git push -u origin master

git push 實際上是把當前分支master推送到遠程
-u代表master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在以後的推送或者拉取時就可以簡化命令
情景4:第二次和之後把本地庫的所有內容推送到遠程庫上

$ git push origin master

備註:當你第一次使用Git的clone或者push命令連接GitHub時,會得到一個警告.yes即可
情景5:創建遠程倉庫
首先,登陸GitHub,創建一個新的倉庫,名字叫gitskills
勾選Initialize this repository with a README
情景6:遠程倉庫克隆(拷貝)到本地倉庫

$ git clone [email protected]:lcd0815/gitskills.git

注意的是:GitHub給出的地址不止一個,還可以用https://github.com/michaelliao/gitskills.git這樣的地址。實際上,Git支持多種協議,默認的git://使用ssh,但也可以使用https等其他協議。
使用https除了速度慢以外,還有個最大的麻煩是每次推送都必須輸入口令,但是在某些只開放http端口的公司內部就無法使用ssh協議而只能用https。

11.分支管理

原理:
在這裏插入圖片描述
在這裏插入圖片描述

git checkout -b dev

相當於

$ git branch dev//創建分支
$ git checkout dev//切換分支

命令git branch 列出所有分支,當前分支前面加上*
在這裏插入圖片描述
這時候如果切換分支master

$ git checkout master

這時候工作區readme.txt的內容會回退一步
在這裏插入圖片描述
接着我們把dev分支的工作成果合併到master分支上(前提是切換到了Master):

$ git merge dev

然後刪除dev分支

$ git branch -d dev

在這裏插入圖片描述
然後查看分支

git branch

就只剩下一個主分支了
總結:
在這裏插入圖片描述

12 分支管理的衝突解決

當兩個分支對文本都有
修改…add…commit
合併的時候就不能快速合併,會提示衝突
必須手動修改文本以後,再次add/commit
在這裏插入圖片描述

git log --graph

查看分支的合併情況 圖像模式
確認合併無誤以後,然後刪除分支

git branch -d f1

13分支管理

普通合併後的歷史有分支,能看出來曾經做過合併

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

fast forward合併就看不出來曾經做過合併

$ git merge dev

分支策略:
首先,master分支應該是非常穩定的,也就是僅用來發布新版本,平時不能在上面幹活;

那在哪幹活呢?幹活都在dev分支上,也就是說,dev分支是不穩定的,到某個時候,比如1.0版本發佈時,再把dev分支合併到master上,在master分支發佈1.0版本;

你和你的小夥伴們每個人都在dev分支上幹活,每個人都有自己的分支,時不時地往dev分支上合併就可以了。

所以,團隊合作的分支看起來就像這樣:
在這裏插入圖片描述

14Bug分支

第一步
在master分支創建在這裏插入圖片描述
並且add&commit
這一步相當於是在master創建一個穩定版本1.0的
第二步
$git checkout -b dev
新建並且切換分支
然後修改文本
在這裏插入圖片描述
然後新建文本
在這裏插入圖片描述
然後add新的這個horse.txt

 git add horse.txt

查看git status
在這裏插入圖片描述
這時候boss要求去修改1.0的bug(bug101),但是2.0還沒有開發好…這時候用到git stash(前提是wow.txt之前add了,horse也被add了)

在這裏插入圖片描述
第三步
回到master的1.0版本,這時候工作區是這樣的
在這裏插入圖片描述
然後創建臨時分支bug101去修改bug
增加內容
在這裏插入圖片描述
add&commit(在bug101分支)
在這裏插入圖片描述
切換回主分支master,完成合並,刪除分支
在這裏插入圖片描述
這時候文本是這樣的:在這裏插入圖片描述
第四步
切換回dev分支,繼續開發2.0
這時候文本是這樣的:
在這裏插入圖片描述
使用命令:git status 乾淨的
輸入命令:在這裏插入圖片描述
恢復有兩種方法:
1,用git stash apply恢復,但是恢復後,stash內容並不刪除,你需要用git stash drop來刪除;
2,用git stash pop,恢復的同時把stash內容也刪了
我們用第二種在這裏插入圖片描述
神奇的事情發生了.工作區變成這樣了:
在這裏插入圖片描述
再次使用在這裏插入圖片描述
沒內容了.這下子就可以繼續開發wow.txt和horse.txt的2.0版本了
如果開發好了.一起add添加&提交commit就可以了
第五步:最後修改工作區
在這裏插入圖片描述
在這裏插入圖片描述
全部搞定!!!

15.分支刪除

當新建分支;add;commit以後

git checkout -b feature-vulcan
git add vulcan.py
git commit -m "add feature vulcan"

如果沒有合併
則不能普通刪除

$ git branch -d feature-vulcan
error: The branch 'feature-vulcan' is not fully merged.
If you are sure you want to delete it, run 'git branch -D feature-vulcan'.

必須強行刪除

$ git branch -D feature-vulcan
Deleted branch feature-vulcan (was 287773e).

16.多人協作

查看本地對應的遠程庫

$ git remote

在這裏插入圖片描述
詳細查看本地對應的遠程庫

$ git remote -v

在這裏插入圖片描述
修改遠程倉庫

git remote rm origin
git remote add origin [url]

本地分支推送到遠程

$ git push origin master
$ git push origin dev

另外一臺電腦上首先克隆這個repo

默認情況下,你的小夥伴只能看到本地的master分支
要在dev分支上開發,就必須創建遠程origin的dev分支到本地,於是他用這個命令創建本地dev分支:

$ git checkout -b dev origin/dev

如果兩個人都對同一個遠程push了

推送失敗,因爲你的小夥伴的最新提交和你試圖推送的提交有衝突,解決辦法也很簡單,Git已經提示我們,先用git pull把最新的提交從origin/dev抓下來,然後,在本地合併,解決衝突,再推送:
遠程分支到本地分支

$ git branch --set-upstream-to=origin/dev dev
$ git pull
手動解決
提交
push

17.Rebase變基

當你發現本地比遠程快2個commit.想要push,卻不行.因爲有人提交了
你就要先pull,把遠程的拖到本地,然後合併提交
git log查看,很亂
解決方案:

git rebase

再次使用git log查看
分支變成了直線,rebase操作的特點:把分叉的提交歷史“整理”成一條直線,看上去更直觀。缺點是本地的分叉提交已經被修改過了
最後,通過push操作把本地分支推送到遠程

別人的建議是

選擇變基還是合併,看具體需求,你只是想要一個清晰,明瞭的歷史,並不關係歷史的具體來源,你可以首選變基,但是如果你想比較清楚地瞭解項目不同階段的原始歷史,你可以選擇直接合並。
一個原則說到最後,還有一個不得不提的原則:永遠不要對已經推到主幹分支服務器或者團隊其他成員的提交進行變基,我們選擇變基還是合併的範圍應該在自己當前工作範圍內。

18標籤管理

創建標籤步驟:
1.git checkout master
2.git tag v1.0(默認標籤打在最新的commit上的

找到歷史提交的commit id的命令

$ git log --pretty=oneline --abbrev-commit

3.$ git tag v0.9 f52c633
給指定的commit打標籤
4.$ git tag
查看標籤
5.git show <tagname>查看標籤信息
6.$ git tag -a v0.1 -m "version 0.1 released" 1094adb
還可以創建帶有說明的標籤,用-a指定標籤名,-m指定說明文字:
7.git show <tagname>可以看到說明文字
8.$ git tag -d v0.1刪除標籤
9.$ git push origin v1.0推送某個標籤到遠程
10.$ git push origin --tags一次性推送全部尚未推送到遠程的本地標籤
11.如果標籤已經推送到遠程,要刪除遠程標籤就麻煩一點,先從本地刪除$ git tag -d v0.9$ git tag -d v0.9
然後,從遠程刪除。刪除命令也是push$ git push origin :refs/tags/v0.9
在這裏插入圖片描述
在這裏插入圖片描述

19 自定義git 忽略特殊文件

在Git工作區的根目錄下創建一個特殊的.gitignore文件,然後把要忽略的文件名填進去,Git就會自動忽略這些文件
git status就看不到了
在這裏插入圖片描述
最後一步就是把.gitignore也提交到Git,就完成了!
在這裏插入圖片描述

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