Git教程-整理自廖雪峯的官方網站

Git教程

參考資料:
廖雪峯的官方網站-Git:https://www.liaoxuefeng.com/wiki/896043488029600

爲什麼Git比其他版本控制系統設計得更優秀?因爲Git跟蹤並管理的是修改,而非文件。
Git在有些情形下不區分大小寫,在有些情形下區分大小寫,所以儘可能嚴格按大小寫來

創建版本庫:
1.首先進入一個要創建版本庫的目錄:
2.通過git init命令將這個目錄變成Git可以管理的倉庫(空倉庫):git init

工作區(Working Directory):就是電腦上能看到的目錄
版本庫(Repository):工作區有一個隱藏目錄.git,這個不算工作區,而是Git的版本庫。
版本庫裏有有些東西非常重要:
1.暫存區(Stage或稱Index)
2.分支:Git會自動創建第一個分支master
3.HEAD指針:GIt會自動創建一個一開始指向master的HEAD指針

把一個文件放入Git倉庫分2步:
1.把文件修改添加到暫存區:git add <name.file>
2.把暫存區的所有內容提交到當前分支:git commit -m ‘’
注意:-m後面輸入的是本次提交的說明

版本的回退和前進:
版本回退:(可使用可視化工具查看Git歷史)
查看提交歷史記錄:git log
注意:
1.若想顯示分支的合併情況,可加–graph參數:git log --graph
2.若嫌輸出信息多,可加–pretty=oneline參數:git log --pretty=oneline
3.若嫌版本號長,可加–abbrev-commit參數:git log --abbrev-commit
組合起來則是:git log --graph --pretty=oneline --abbrev-commit

回退到上一個版本:git rest --hard HEAD^
回退到上上一個版本:git rest --hard HEAD^^
回退到往上100個版本:git rest --hard HEAD~100
回到某一個版本:git reset --hard <某個commit id>
注意:版本號沒必要寫全,寫前幾位就夠了,Git會自動去找
注意:從新版本到舊版本可以利用HEAD^,從舊版本到新版本則必須要用到commit id
查看歷史命令記錄:git relog
注意:可以通過查看命令歷史,來找出某個未來版本的commit id,以便回到未來版本

查看工作區的狀態:git status

查看修改內容(若有文件被修改):git diff <name.file>
補充:git diff命令還可以設置參數:詳見:https://www.cnblogs.com/lsgxeva/p/8540485.html
git diff HEAD – readme.txt:查看HEAD所指的和工作區內的readme.txt的區別
注意:這條命令可以省略寫成git diff HEAD
git diff:查看暫存區快照的和工作區內的readme.txt的區別,相當於git diff index – readme.txt(但沒有這種命令寫法)
git diff --cached或git diff --staged:查看HEAD所指的和暫存區快照的readme.txt的區別,相當於git diff HEAD – index(但沒有這種命令寫法)
注意:上面這條命令的–後面緊跟着cached或staged
git diff命令輸出解讀:https://www.jianshu.com/p/c0a4fdff905f
輸出裏的a表示第一個變量,b表第二個變量
具體的差異信息中:
以空格開頭的行代表a文件與b文件沒有差異,以-開頭的行代表在a文件的基礎上刪除,以+開頭代表在a文件的基礎上添加。

遠程倉庫:
添加遠程庫:
GitHub免費提供倉庫託管服務,本地倉庫和GitHub倉庫之間的傳輸是通過SSH加密的。
建立遠程庫的過程:
1.在本地和GitHub間建立SSH連接(詳見教程)
2.在GitHub上創建遠程庫’Create repository’(名稱爲learningit)
3.關聯本地和GitHub上的遠程庫(命名爲origin):
git remote add origin [email protected]:<你自己的GitHub用戶名>/learningit.git
4.第一次將本地庫(learningit)master分支內容推送到GitHub遠程庫:git push -u origin master
注意:由於是第一次推送,遠程庫是空的,所以加上-u參數,這樣Git不但會完成推送,而且會把本地和遠程的master分支關聯起來,在以後的推送或拉取就可以化簡命令(省略-u)。

克隆遠程庫:
克隆遠程庫gitskills.git到本地:
git clone [email protected]:<遠程庫所在的GitHub用戶名>/gitskills.git
補充:Git支持多種協議,包括https,但ssh協議速度最快。

分支管理:
分支相關操作:
查看分支:git branch

創建分支:git branch

切換分支:git switch 或 git checkout

創建+切換分支:git switch -c 或 git checkout -b

刪除分支:git branch -d
注意:這是分支經合併後的正常刪除方式,但如果分支還未被合併,想刪除分支,則需要使用大寫的-D參數進行強制刪除。

合併B分支到當前分支(A分支):分幾種情況:
一:Git可以執行’快速合併’的情形
先切換到A分支:git switch A
然後合併B分支:git merge B
最後刪除B分支:git branch -d B
補充:Git執行’快速合併’,並刪除分支B後,會丟掉分支信息(即從提交歷史中看不出曾有合併跡象)。而強制禁用‘快速合併’後,Git會在merge時生成一個新的commit,這樣,從歷史分支上就可以看出分支信息:對應的命令是:
先切換到A分支:git switch A
然後強制禁用‘快速合併’進行合併:git merge --no-ff -m ‘’ B
最後刪除B分支:git branch -d B
二:Git無法執行’快速合併’的情形
先解決衝突(把Git合併失敗的文件手動編輯爲我們希望的內容),再提交,再刪除分支B,合併完成
補充:可以用git log --graph命令看到分支合併圖

分支策略:
master分支應該是非常穩定的,也就是僅用來開發新版本,平時不能在上面幹活
dev分支是不穩定的,幹活應該在dev分支上,到某個時間,如1.0版本發佈時,再把dev分支合併到master上
每個人都在dev分支上幹活,每個人又都有自己的分支,時不時往dev分支上合併就可以了

保存恢復現場相關操作(適應於停下手頭工作修改bug情形):
保存現場:git stash
恢復現場:2種方法:
一:先通過git stash list查看要恢復的現場的編號stash@{#},再用git stash apply stash@{#}恢復指定的stash,但恢復後,stash內容並不刪除,需要用git stash drop手動刪除
二:用git stash pop,這樣恢復的同時stash內容也刪了
注意:恢復的時候要先切回到正確的分支上

複製特定提交到當前分支:git cherry-pick
注意:適用於把已經在其他分支上完成對bug的修改,’複製’到當前分支(避免重複勞動),當然必須知道修復bug對應的修改對應的版本號

多人協作:
查看遠程庫信息:git remote
查看遠程庫更詳細信息:git remote -v
推送本地分支A(如master,dev)到遠程庫(默認名爲origin):git push origin <A>
補充:常見分支有:master分支(主分支)、dev分支(開發分支)、bug分支(本地修復bug)、feature分支(功能實現分支),一般master分支和dev分支需要推送,時刻與遠程同步,而bug分支不需要,feature分支則取決於你是否和你的小夥伴合作在上面開發。
抓取分支:

標籤管理:

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