1. Git簡介
Git 是一個 分布式的版本控制工具,其應(yīng)用場景如下:
結(jié)構(gòu)如下:
2. 下載并安裝Git
-
首先下載Git并安裝,安裝完后,右擊鼠標(biāo)會有:
-
創(chuàng)建git倉庫:進(jìn)入想要的文件夾打開 cmd 或 Git Bash Here,用以下命令將文件夾改造為git倉庫
-- 當(dāng)前文件夾變?yōu)間it空間 git init
- 可以創(chuàng)建無數(shù)個git倉庫,一般一個工程項(xiàng)目對應(yīng)以一個git倉庫。
-
在git倉庫中,查看用戶名和郵箱
-- 參數(shù)l是list的縮寫 git config -l
-
修改用戶名和郵箱
git config --global user.name 用戶名 git config --global user.email 郵箱
3. 跟蹤
-
第一次創(chuàng)建git倉庫后,該倉庫內(nèi)的所有文件都是未被跟蹤的。倉庫內(nèi)的文件 只有被提交到緩沖區(qū),該文件才會被 跟蹤,只有被跟蹤,文件發(fā)生變化時(shí)才能被檢查到。
-- 文件放入緩沖區(qū) git add 文件名或目錄 // 放入當(dāng)個文件 git add . // 放入當(dāng)前目錄下的所有文件 -- 刪除跟蹤 git rm 文件名或目錄名
-
設(shè)置不跟蹤哪些文件:
-
在倉庫所在目錄創(chuàng)建
.gitignore
文件 -
在
.gitignore
文件中寫不跟蹤的文件名(可以用正則匹配)
-
4. Git流程
-
修改后的文件,使用
add
命令提交到 緩沖區(qū)-- 放入緩沖區(qū) git add 文件名 // 添加當(dāng)個文件 git add 文件名1 文件名2 文件名3 // 添加多個文件 git add . // 放入當(dāng)前目錄下的所有文件 -- 取消緩沖區(qū)的文件 git reset head 緩沖區(qū)的文件或目錄名
-
再使用
commit
命令將 緩沖區(qū)數(shù)據(jù) 提交到 本地倉庫-- 提交 git commit -m 此次提交順帶的評論 // 可以用單引號,也可以不用單引號 git tag commitID別名 // 提交之后可以為剛剛提交生成的commitID取別名 -- 回退到之前或之后的某個版本 git reset --hard 上次提交生成的commitID // 通過 git log 命令查看
注意:
- 第一次提交不能取消,第二、三…次都可以取消。
- 可以使用
tag
命令為生成的commitID取別名,因?yàn)閏ommitID是一組hash值,不太方便直觀展示其意義。 -
每次commit生成新版本時(shí),當(dāng)前分支都會隨著新版本移動。
-
將本地倉庫代碼提交到遠(yuǎn)程倉庫
5. 基本指令
5.1 查看倉庫的狀態(tài)
git status
5.2 查看所有版本
- 當(dāng)不小心刪除了版本記錄,可以使用
git reflog
去查看記錄,得到之前的版本ID
5.3 查看不同版本之間有哪些不同
- 先使用
git log
查看所有版本信息,復(fù)制要比較的版本ID - 命令:
git diff 版本ID1 版本ID2
5.4 版本回退
- 先使用
git log
查看所有版本信息,復(fù)制要進(jìn)入的版本ID - 命令:
git reset --hard 版本ID
6. 分支
6.1 分支相關(guān)命令
-
查看所有分支
git branch // 只顯示本地倉庫的分支 git branch -a // 顯示本地倉庫的分支、以及遠(yuǎn)程倉庫的分支 git branch -a -v // 顯示本地倉庫的分支、以及遠(yuǎn)程倉庫的分支;以及對應(yīng)的commitID、commit評論 git branch -a -vv // 顯示本地倉庫的分支、以及遠(yuǎn)程倉庫的分支;以及對應(yīng)的commitID、本地分支與遠(yuǎn)程的哪個分支綁定、commit評論
- 這個命令只是用來查看有哪些分支,對于哪些分支分別提交了幾次,還是要使用上面的
git log --all --pretty=onelone --abbrev-commit --graph
在 Git 中 HEAD 表示 當(dāng)前分支
- 這個命令只是用來查看有哪些分支,對于哪些分支分別提交了幾次,還是要使用上面的
-
創(chuàng)建分支
-- 1. 創(chuàng)建git倉庫時(shí),會自動創(chuàng)建一個名為 master 的分支 -- 2. 若在master 分支的基礎(chǔ)上還想創(chuàng)建新分支,使用 branch 命令 git branch 分支名
-
刪除分支
git branch -d 分支名 git branch -D 分支名 // 大D是強(qiáng)制刪除分支。比如:一個分支發(fā)生了修改,但是還未合并到其它分支,此時(shí)使用小d刪除該分支會失敗。
-
切換分支
git checkout 分支名 // 若分支名不存在,則切換失敗 git checkout -b 分支名 // 若分支名不存在,則創(chuàng)建該分支,并切換到該分支
-
分支合并
- 使用 merge:將兩條分支的末尾連接起來,本質(zhì)是將兩個節(jié)點(diǎn)合并。
// 將分支2合并到分支1上 -- 1. 首先切換到一個被合并的分支1上 git branch 分支1 -- 2. 再將分支2合并到分支1上 git merge 分支2
- 使用 rebase:將兩條分支合并為一條分支 【git rebase詳解(圖解+最簡單示例,一次就懂)】
// 將分支2合并到分支1上 -- 1. 首先切換到一個被合并的分支1上 git branch 分支1 -- 2. 再將分支2合并到分支1上 git rebase 分支2
- 兩者對比:
- 應(yīng)用場景對比:
- 當(dāng)新功能要合并到master,但是后續(xù)可能會修改,此時(shí)用 merge
- 當(dāng)新功能要合并到master,且以成熟后續(xù)不會再更改,此時(shí)用 rebase
- 使用 merge:將兩條分支的末尾連接起來,本質(zhì)是將兩個節(jié)點(diǎn)合并。
-
分支合并時(shí)引發(fā)沖突:因?yàn)榉种еg是獨(dú)立的,所以可能兩個分支同時(shí)修改了某一行,此時(shí)將兩者合并時(shí),git就不知道該行該設(shè)置為什么值。解決方法如下
- 將一個分支合并到另一個分支上,沒有提示沖突就說明沒有沖突;如果提示了以下信息就說明發(fā)生了沖突:
- 打開沖突文件,使用
=====
定位到發(fā)生沖突的行 - 想修改為多少,就寫多少,將其余代碼刪除
- 將修改后的沖突文件提交到緩沖區(qū):
git add file01.txt
- 再生成新版本:
git commit -m 'new'
- 將一個分支合并到另一個分支上,沒有提示沖突就說明沒有沖突;如果提示了以下信息就說明發(fā)生了沖突:
6.2 開發(fā)中分支使用原則
視頻連接:https://www.bilibili.com/video/BV1MU4y1Y7h5/?p=11&spm_id_from=pageDriver&vd_source=5534adbd427e3b01c725714cd93961af
7. 遠(yuǎn)程倉庫 <—> 本地倉庫
(1) 設(shè)置密鑰
-
本地電腦生成密鑰
ssh-keygen -t rsa
然后一路回車
-
復(fù)制密鑰
cat ~/.ssh/id_rsa.pub
然后復(fù)制密鑰
-
將密鑰粘貼在GitHub、Git、等遠(yuǎn)程倉庫的ssh配置中
(2) 遠(yuǎn)程倉庫 --> 本地倉庫
場景一:拉取整個項(xiàng)目
- 從遠(yuǎn)程倉庫復(fù)制URL地址
- 進(jìn)入到待保存數(shù)據(jù)的文件夾,使用
clone
命令拉取項(xiàng)目
場景二:只將遠(yuǎn)程倉庫更新的分支抓取到本地
-
通過以下命令拉取:
- 視頻連接:https://www.bilibili.com/video/BV1MU4y1Y7h5?p=20&spm_id_from=pageDriver&vd_source=5534adbd427e3b01c725714cd93961af
(3) 本地倉庫—>遠(yuǎn)程倉庫
-
從遠(yuǎn)程倉庫復(fù)制URL地址
-
與遠(yuǎn)程倉庫建立連接
-
查看遠(yuǎn)程倉庫是否連接成功
-
把本地倉庫項(xiàng)目推給遠(yuǎn)程倉庫
-
直接提交此次項(xiàng)目:
- 參數(shù):①
-f
表示強(qiáng)制覆蓋,當(dāng)本地倉庫和遠(yuǎn)程倉庫都修改了同一行時(shí)就會沖突。(一般情況下是不會沖突,所以可以不使用該參數(shù))
???②--set-upstream
表示將該命令中的本地分支名和遠(yuǎn)端分支名自動綁定。這樣后續(xù)再推送時(shí),就很方便。- 例子:
因?yàn)橐呀?jīng)綁定了,所以直接push,不用再指定一些參數(shù) - 查看已經(jīng)綁定的分支:
git branch -vv
- 例子:
- 注意:若遠(yuǎn)程分支名 和 本地分支名相同,則可以只寫一個。比如:
git push origin master:master // 可以簡寫為: git push origin master
- 參數(shù):①
-
用此次項(xiàng)目替代上一次的項(xiàng)目,即commitID還是上次的,但是項(xiàng)目是此次的:
-
常見問題:版本沖突
解決方法:就和之前解決分支沖突的方法一樣。(遠(yuǎn)程拉取的分支也是分支,所以解決方法一樣)文章來源:http://www.zghlxwxcb.cn/news/detail-752019.html
8. 指令大全
文章來源地址http://www.zghlxwxcb.cn/news/detail-752019.html
9. 經(jīng)典問題
- 問題:從遠(yuǎn)程倉庫拉取項(xiàng)目之后,使用
git branch
查看分支,沒有一個分支,連master分支都沒有。解決方法: - 解決方法:將拉去到的項(xiàng)目再提交,并與遠(yuǎn)程倉庫建立連接,然后從遠(yuǎn)程倉庫
fetch
數(shù)據(jù)
10. 例子:工作中指令使用
// 1. 查看狀態(tài)
git status
// 2. 添加文件
git add 文件1 文件2 文件3
// 3. 從遠(yuǎn)程倉庫拉取數(shù)據(jù)
git pull
// 4. 提交到本地倉庫
git commit -m "icafe編號 需求標(biāo)題"
// 5. 提交到遠(yuǎn)程倉庫
git push origin HEAD:refs/for/master
到了這里,關(guān)于Git 『流程 | 基本命令 | 分支 | 推送與拉取』的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!