學(xué)習(xí)廖雪峰 Git 教程記錄
git 是一個(gè)分布式版本控制系統(tǒng)级历,更好的管理文件债蜜。但是其實(shí) Git 跟蹤管理的是修改,并非文件痕囱。
初始化一個(gè)倉庫,使用 git init
創(chuàng)建版本庫
添加文件到 Git 倉庫摊唇,分兩步:
-
git add <file>
可一次添加多個(gè)文件 -
git commit -m "說明"
提交并添加注釋
git staus
可以查看工作區(qū)的狀態(tài)
如果 git status
告訴你文件有被修改過咐蝇, 用 git diff
可以查看修改內(nèi)容
版本回退
HEAD
指向的版本是當(dāng)前版本,使用 git reset --hard commit_id
可以回退到指定版本
git log
可以查看提交歷史
git reflog
查看命令歷史
暫緩區(qū)
Git 的版本庫在工作區(qū)的隱藏目錄 .git
中巷查,里面有很多東西,最重要的是稱為 stage 的暫存區(qū)抹腿,還有 Git 為我們自動(dòng)創(chuàng)建的第一個(gè)分支 master
岛请,以及指向 master
的一個(gè)指針 HEAD
。
git diff HEAD -- <file>
查看工作區(qū)和版本庫里面最新版本的區(qū)別警绩。
撤銷修改
直接丟棄工作區(qū)的修改時(shí)崇败,可是使用 git checkout -- file
注意 --
必須加。
當(dāng)文件已經(jīng)被添加到了暫存區(qū)時(shí),想丟棄修改后室,分兩步:
git reset HEAD file
-
git checkout -- file
當(dāng)文件已經(jīng)被提交到了版本庫時(shí)缩膝,可以回退版本庫。使用git reset --hard commit_id
刪除文件
git rm file
從版本庫和工作區(qū)中刪除文件岸霹,之后 git commit
git checkout -- file
用版本庫里的版本替換工作區(qū)的版本疾层。
遠(yuǎn)程倉庫
- 創(chuàng)建 SSH Key
ssh-keygen -t rsa -C "youremail@example.com"
之后會(huì)在目錄下生成 .ssh
目錄
- 在 GitHub 中打開 “SSH and GPG keys”,并且 “New SSH key”贡避,填寫 title痛黎, 將
id_rsa.pub
中的內(nèi)容復(fù)制進(jìn)去
asd.png
當(dāng)然,也可以添加多個(gè) Key刮吧,GitHub 只要知道了你的公鑰湖饱,就可以確認(rèn)只有你自己才能推送。遠(yuǎn)程倉庫是為了方便你的硬盤杀捻。
將本地倉庫內(nèi)容推送到 GitHub 倉庫
git remote add origin git@github.com:MjSeven/learngit.git
git push -u origin master
關(guān)聯(lián)一個(gè)遠(yuǎn)程庫井厌,使用
git remote add origin git@server-name:path/repo-name.git
關(guān)聯(lián)后,使用git push -u origin master
第一次推送master分支的所有內(nèi)容
之后就可以使用git push origin master
推送最新修改
分支操作
查看分支 git branch
創(chuàng)建分支 git branch <name>
切換分支 git checkout <name>
快捷操作
git checkout -b <name>
合并某分支到當(dāng)前分支 git merge <name>
刪除分支 git branch -d <name>
分支策略
在實(shí)際開發(fā)中致讥,有幾個(gè)基本原則:
master
分支應(yīng)該是非常穩(wěn)定的旗笔,僅僅用來發(fā)布新版本
平時(shí)都應(yīng)該在一個(gè)新的分支 dev
上干活,它是不穩(wěn)定的拄踪,到時(shí)機(jī)成熟時(shí)蝇恶,把 dev
分支合并到 master
上,在 master
分支發(fā)布新版本惶桐。
合并分支時(shí)撮弧,加上
--no-ff
參數(shù)可以使用普通模式合并,合并后的歷史有分支
Bug 管理
修復(fù) bug 時(shí)姚糊,會(huì)通過創(chuàng)建新的 bug 分支進(jìn)行修復(fù)贿衍,然后合并,最后刪除
如果當(dāng)前分支還有未完成的工作時(shí)救恨,先 git stash
保存工作現(xiàn)場(chǎng)贸辈,然后去修復(fù) bug
,修復(fù)后使用 git stash pop
肠槽,回到工作現(xiàn)場(chǎng)擎淤。
如果是新加特性,最好新建一個(gè)分支
如果要丟棄一個(gè)沒有合并過的分支秸仙,可以使用git branch -D <name>
強(qiáng)行刪除
本文所有內(nèi)容來自于以下網(wǎng)站學(xué)習(xí):
https://learngitbranching.js.org/?
初級(jí)篇
git commit
倉庫中的提交記錄保存的是你的目錄下所有文件的快照嘴拢,git 希望記錄盡可能地輕量,在每次提交時(shí)寂纪,它并不會(huì)盲目復(fù)制整個(gè)目錄席吴,在條件允許下赌结,它會(huì)將當(dāng)前版本于倉庫中的上一個(gè)版本進(jìn)行對(duì)比,并把所有差異打包到一起作為一個(gè)提交記錄
git branch
使用分支相當(dāng)于在說:“我想基于這個(gè)提交以及它所有的父提交進(jìn)行新的工作”
git 創(chuàng)建再多的分支也不會(huì)造成存儲(chǔ)或內(nèi)存上的開銷
git checkout <name>
切換工作分支
git checkout -b <your-branch-name>
創(chuàng)建一個(gè)新的分支同時(shí)切換到新創(chuàng)建的分支
git merge <name>
將 name 的分支合并到當(dāng)前分支
git rebase
Rebase 實(shí)際上就是取出一系列的提交記錄孝冒,“復(fù)制”它們柬姚,然后再另外一個(gè)地方逐個(gè)放下去
高級(jí)篇
HEAD
HEAD 是一個(gè)對(duì)當(dāng)前檢出記錄的符號(hào)引用 -- 也就是指向逆正在其基礎(chǔ)上進(jìn)行工作的提交記錄。
HEAD 總是指向當(dāng)前分支最近一次提交記錄庄涡。
^
相對(duì)引用量承,向上提交一個(gè)記錄,如 git checkout master^
,就是切換到 master 的父節(jié)點(diǎn)。 另外也可以將 HEAD
作為相對(duì)引用的參照啼染。例如: git checkout HEAD^
~
如果你想在提交樹上移動(dòng)很多步的話宴合,敲很多 ^
非常煩人,所以引入了操作符 ~
,該操作符后可以跟一個(gè)數(shù)字迹鹅,不跟時(shí)與 ^
,相同卦洽。
git branch -f master HEAD~3
將 master 分支強(qiáng)制指向 HEAD 的第 3 級(jí)父提交
git reset / git revert
撤銷變更 通過 HEAD^ 提交, 撤銷本地分支
當(dāng) Git 無法自動(dòng)合并分支時(shí),就必須首先解決沖突斜棚。解決沖突后阀蒂,在提交,合并完成弟蚀。
用git log --graph
可查看分支合并圖