git入門
參考:
1.https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
2.https://git-scm.com/book/zh/v2
目的
之前在windows上一直使用tortoise git所以一直沒有研究git 命令域滥,現(xiàn)在新?lián)Q了mac晋柱,圖形工具支持不友好缸浦,系統(tǒng)學(xué)習(xí)了下相關(guān)文檔,總結(jié)學(xué)習(xí)到的內(nèi)容
git解決的問題
- 每次修改一個東西近上,就怕把之前的改壞了,就需要不停的備份蜕窿,所以需要記錄每次文件的改動体捏,git為每次提交保存一個快照,能實時恢復(fù)
- 協(xié)作編輯編輯時經(jīng)常需要很多人同時編輯梗摇,最后只能人工手動合并拓哟,git提供分支合并功能,且通過diff查看差異伶授,幫助解決沖突和合并代碼
git的誕生
- 1991 Linus雖然創(chuàng)建了Linux
- 志愿者把源代碼文件通過diff的方式發(fā)給Linus断序,然后由Linus本人通過手工方式合并代碼
- Linus堅定地反對CVS和SVN,這些集中式的版本控制系統(tǒng)不但速度慢糜烹,而且必須聯(lián)網(wǎng)才能使用违诗。有一些商用的版本控制系統(tǒng),雖然比CVS疮蹦、SVN好用诸迟,但那是付費的,和Linux的開源精神不符
- 2002 BitKeeper的東家BitMover公司出于人道主義精神愕乎,授權(quán)Linux社區(qū)免費使用這個版本控制系統(tǒng)
- 2005 開發(fā)Samba的Andrew試圖破解BitKeeper的協(xié)議阵苇,BitMover收回免費使用權(quán)
- linus花了兩周時間自己用C寫了一個分布式版本控制系統(tǒng),這就是Git
- 2008 GitHub網(wǎng)站上線了感论,它為開源項目免費提供Git存儲
git和svn的區(qū)別
- git是分布式版本控制系統(tǒng)绅项,每個人的電腦上都是一個完整的版本庫,不同用戶只需要推修改比肄,布式版本控制系統(tǒng)通常也有一臺充當(dāng)“中央服務(wù)器”的電腦快耿,但這個服務(wù)器的作用僅僅是用來方便“交換”大家的修改湿硝,沒有它大家也一樣干活,只是交換修改不方便而已润努。(強大的分支管理能力)
- git直接記錄快照,而非差異比較
- svn是集中式版本控制系統(tǒng)示括,版本庫是集中存放在中央服務(wù)器的(必須聯(lián)網(wǎng))
git初始化配置
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
配置全局的用戶名和郵箱铺浇,分布式服務(wù)必須指定自己的名稱
git名詞解釋
工作區(qū)
在電腦里能看到的目錄
文件狀態(tài)
- 已提交(committed) 已提交表示數(shù)據(jù)已經(jīng)安全的保存在本地數(shù)據(jù)庫中
- 已修改(modified) 已修改表示修改了文件,但還沒保存到數(shù)據(jù)庫中垛膝。
- 已暫存(staged) 已暫存表示對一個已修改文件的當(dāng)前版本做了標(biāo)記鳍侣,使之包含在下次提交的快照中。
版本庫
工作區(qū)有一個隱藏目錄.git吼拥,這個不算工作區(qū)倚聚,而是Git的版本庫
- 在工作目錄中修改文件。
- 暫存文件凿可,將文件的快照放入暫存區(qū)域惑折。
- 提交更新,找到暫存區(qū)域的文件枯跑,將快照永久性存儲到 Git 倉庫目錄惨驶。
git本地倉庫常用命令
git help <verb> --查看幫助
git init --初始化git倉庫
git config --配置git信息
--global --配置全局參數(shù)
alias.co checkout --別名
color.ui true --顯示顏色
git add --將文件添加到提交目錄
git commit --提交add后的內(nèi)容到本地倉庫
-m "wrote a readme file" --提交說明,必須攜帶
-a --跳過add敛助,直接全部提交
--amend --重新提交
git status --查看倉庫狀態(tài)粗卜,查看是否有文件被修改
git log --顯示從最近到最遠(yuǎn)的日志
--pretty=oneline --一行顯示
-p --查看具體差距
-3 --查看最近幾次日志
--stat --簡要說明
git reset --回退版本號(此時使用git log將看不到后續(xù)commit日志)
head --當(dāng)前版本
head^ --上一個版本,類推
head~ --上兩個版本
123124 --commitid前幾個數(shù)字纳击,不重復(fù)即可
--mixed --默認(rèn)续扔,回退到你未add時的狀態(tài)
--hard --回退,但你的修改全部消失
--soft --回退到你add焕数,但未commit的狀態(tài)
git reflog --記錄每一次的命令
git mv <oldname> <newname> --重命名纱昧,類似于rm+add
git diff --查看被修改的具體內(nèi)容
--cached(staged) --
git checkout --撤銷工作區(qū)修改
-- file --指定文件(原先文件會消失)
git reset HEAD file --撤銷暫存區(qū)修改
git rm --刪除版本庫文件
--cached --刪除緩存,+push可以刪除遠(yuǎn)程倉庫
ssh加密
.ssh目錄下創(chuàng)建id_rsa和id_rsa.pub
$ ssh-keygen -t rsa -C "youremail@example.com"
- id_rsa 私鑰
- id_rsa.pub 公鑰
git遠(yuǎn)程倉庫常用命令
git remote add origin git@gitee.com:ziningmei/learngit.git --設(shè)置遠(yuǎn)程倉庫
git remote --查看遠(yuǎn)程庫
-v --更詳細(xì)信息
git clone --從遠(yuǎn)程倉庫克隆一個本地庫
git分支命令
git checkout -b <name> --創(chuàng)建并切換分支(等同下兩個命令)
git branch --查看分支(*表示當(dāng)前分支)
git branch <name> --創(chuàng)建分支
git checkout <name> --切換分支
git push origin -d <name> --將當(dāng)前分支push到遠(yuǎn)程分支
git fetch --將遠(yuǎn)程的commit拉取到本地堡赔,但不會修改head
git pull --將遠(yuǎn)程的commit拉取到本地砌些,但會修改head指向最新的commit
--git fetch+git merge+git commit
git merge <name> --將dev合并到當(dāng)前分支
--no-merged --未合并分支
git branch -d <name> --刪除分支
git push origin -d <name> --刪除遠(yuǎn)程分支
git merge --no-ff -m "test" dev --強制禁用Fast forward模式,會生成一個commit
--ff模式刪除分支會丟掉分支信息
git rebase --類似于merge加匈,rebase是把分支上每一次提交merge一次存璃,需要
--處理多個沖突,且不會生成commit
git stash --暫時保存工作區(qū)(需要先git add)
git stash apply stash@{0} --恢復(fù)stash雕拼,并不刪除
git stash drop --刪除stash
git stash list --查看stash list
git stash pop --回復(fù)stash纵东,并刪除
git標(biāo)簽命令
git tag --查看的所有標(biāo)簽
git check <name> --切換tag
git tag <name> <commitid> --對某個commit打標(biāo)簽
-a --指定標(biāo)簽名
-m --標(biāo)簽說明
-d --刪除標(biāo)簽
git show <tagname> --查看說明文字
git push origin <tagname> --將分支推到遠(yuǎn)程倉庫
--tags --推送所有的tags
:refs/tags/<tagname> --遠(yuǎn)程刪除標(biāo)簽