版本控制
版本控制是一種記錄一個(gè)或若干文件內(nèi)容變化,以便將來查閱特定版本修訂情況的系統(tǒng)。
-
常見的版本控制系統(tǒng):
- 本地版本控制系統(tǒng)
- 集中式版本控制系統(tǒng)(SVN)
- 分布式版本控制系統(tǒng)(Git)
Git的優(yōu)勢(shì):
-
重要概念:
- 已提交(committed):該文件已經(jīng)被安全地保存在本地?cái)?shù)據(jù)庫(kù)中,只有這種狀態(tài)才可以將其push到遠(yuǎn)程倉(cāng)庫(kù)中。
- 已修改(modified):修改了某個(gè)文件,但還沒有提交保存。
- 已暫存(staged):把已修改的文件放在下次提交時(shí)要保存的清單中(這里的提交指的是本地倉(cāng)庫(kù))
1.首先設(shè)置用戶名和郵箱
git config --global user.name "你的Github用戶名"
git config --global user.name github注冊(cè)時(shí)的郵箱
2.clone項(xiàng)目
-
clone項(xiàng)目前,需要建立公鑰私鑰對(duì):
- ssh-keygen -t rsa -b 4096 -C "yan358941877@163.com"
- 拷貝id_rsa.pub中的內(nèi)容到github中的SSH and GPG keys
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQA.....
用于把一個(gè)GitHub中的一個(gè)項(xiàng)目clone到本地變?yōu)楸镜貍}(cāng)庫(kù)
git clone git@github.com:yan358941877/blog.git
// git@github.com:yan358941877/blog.git是GitHub中,一個(gè)項(xiàng)目的SSH
3.添加文件并提交
- 打開相應(yīng)文件夾并創(chuàng)建文件
# 創(chuàng)建文件 Linux
touch a.md
# 在文件里寫入一個(gè)字符串
echo "hello" > a.md
# 查看當(dāng)前倉(cāng)庫(kù)狀態(tài)
git status
# 把當(dāng)前文件夾下的新增和刪除全都放入暫存區(qū)
git add a.md 或者 git add .
# 提交文件:參數(shù)a表示直接提交; 參數(shù)m及后面的字符串"add"表示當(dāng)前提交的說明信息(文件的修改)
git commit -am "add"
# 將本地倉(cāng)庫(kù)推送到遠(yuǎn)程倉(cāng)庫(kù)
git push
# 將當(dāng)前本地庫(kù)里的改動(dòng)推送到遠(yuǎn)程庫(kù)(origin)的master分支
或 git push origin master
4.git pull操作
- 由于git是一個(gè) 分布式版本控制系統(tǒng) ,當(dāng)別人對(duì)倉(cāng)儲(chǔ)進(jìn)行修改后,這時(shí)你需要向倉(cāng)儲(chǔ)添加文件,為了保持所有倉(cāng)儲(chǔ)內(nèi)容的一致性,需要先執(zhí)行g(shù)it pull操作,使得本地與遠(yuǎn)程倉(cāng)儲(chǔ)的內(nèi)容一致,然后再向遠(yuǎn)程倉(cāng)儲(chǔ)添加新建的文件。
5.修改刪除文件
- 修改文件
vim a.md(或者直接修改文件)
git add .
# 如果提交消息包含大量字符串,提交的參數(shù)不用加 m,此時(shí)會(huì)進(jìn)入vim界面,可以編輯說明信息
git commit -a
git push origin master
- 刪除文件
rm -rf a.md (Linux下命令)
git add .
git commit -am "刪除a.md"
git push
# 如果之前已經(jīng)git push origin master過,后面可以直接簡(jiǎn)化為git push
6.本地創(chuàng)建一個(gè)git項(xiàng)目推送到遠(yuǎn)程空倉(cāng)庫(kù)
- 首先在GitHub上創(chuàng)建一個(gè)空倉(cāng)庫(kù),并得到空倉(cāng)庫(kù)的SSH(例如git@github.com:yan358941877/javascript.git)
mkdir newProject
cd newProject
#把一個(gè)文件夾初始化成一個(gè)本地git倉(cāng)庫(kù)
#注意倉(cāng)庫(kù)和文件夾的區(qū)別在于倉(cāng)庫(kù)下有一個(gè)隱藏的.git文件夾,里面保存了相關(guān)信息
#對(duì)于一個(gè)倉(cāng)庫(kù),刪除.git文件夾,就變成一個(gè)普通文件夾了
git init
touch index.html
echo "hello" > index.html
git add .
git commit -am "init"
git remote add origin git@github.com:yan358941877/javascript.git
git push -u origin master
#查看本地庫(kù)里記錄的遠(yuǎn)程庫(kù)地址
git remote -v
#為遠(yuǎn)程庫(kù)的地址添加標(biāo)簽/別名——origin
git remote add origin git@github.com:yan358941877/javascript.git
#推送到遠(yuǎn)程庫(kù)地址
git push origin master
git remote add abcd git@github.com:yan358941877/javascript.git
#推送到遠(yuǎn)程庫(kù)地址
git push abcd master
#刪除遠(yuǎn)程庫(kù)地址的標(biāo)簽/別名
git remote remove abcd
#修改origin標(biāo)簽對(duì)應(yīng)的地址
git remote set-url origin git@github.com:abcdef.git
#修改遠(yuǎn)程庫(kù)地址的標(biāo)簽/別名
git remote rename abcd coding
7.分支操作
-
查看(當(dāng)前項(xiàng)目)本地所有分支:git branch -a
- *代表當(dāng)前所處的分支 master代表主干分支
- 紅色的代表遠(yuǎn)程分支 remotes/origin/master表示遠(yuǎn)程origin地址上的主干分支
創(chuàng)建本地庫(kù)dev分支:git branch dev
-
切換到dev分支:git checkout dev
- 在dev分支下進(jìn)行相關(guān)操作
touch b.html git add . git commit -am "add b.html"- 查看當(dāng)前文件夾,發(fā)現(xiàn)存在b.html
- 切換到master分支,再次查看文件夾,發(fā)現(xiàn)b.html消失
推送到origin地址的dev分支上:git push origin dev
-
合并分支:
- git checkout master
- git merge dev:將dev分支的內(nèi)容合并到當(dāng)前上(可以不是主干分支)
- git push origin master