前言
Git是版本控制系統(tǒng)猪贪,由Linux開源社區(qū)開發(fā)。與其他的版本系統(tǒng)相比盆偿,Git更加快速柒爸,便捷。主要是Git存儲(chǔ)的是快照事扭,而非差異性比較捎稚。并且絕大數(shù)操作都是訪問本地文件和資源,沒有網(wǎng)絡(luò)時(shí)也可以直接提交求橄,等到有網(wǎng)時(shí)再推送到遠(yuǎn)程倉(cāng)庫(kù)今野。對(duì)于文件的歷史也是直接拉取本地,瞬間完成罐农。
背景
解決一下場(chǎng)景遇到的問題
業(yè)務(wù):個(gè)人信息的需求条霜。
Coder:碼碼碼碼碼碼。涵亏。宰睡。(進(jìn)行中)
安全部門:怎么檔案的信息改下id蒲凶,能看到別人的檔案,趕緊修復(fù)拆内。
Coder:個(gè)人信息還沒做好旋圆,檔案修復(fù)和個(gè)人信息文件又存在交叉,不能提交麸恍,該怎么辦灵巧?
文件狀態(tài)變化周期
文件的狀態(tài)只有兩種:未跟蹤(untracked)和已跟蹤(unmodified、modified抹沪、staged)
1. 工作目錄下創(chuàng)建new.php文件
執(zhí)行 git status刻肄,可以發(fā)現(xiàn)new.php還沒有被git跟蹤
2. 跟蹤new.php文件
執(zhí)行g(shù)it add . 后,文件被放入暫存區(qū)(staged)
3. 修改new.php的內(nèi)容
git status 后融欧,出現(xiàn) Changes not staged for commit肄方,說明跟蹤的文件已被修改,還未放入在暫存區(qū)
4. 暫存修改的new.php
git add 是個(gè)多功能的命令蹬癌,既可以將未跟蹤的文件放入暫存區(qū)权她,也可以將修改的文件放入暫存區(qū),當(dāng)然它還有其他的一些功能逝薪。從上面的圖我們可以看到隅要,修改的文件被放入到暫存區(qū)了。
5. 提交董济,生成快照
git commit -m "add new" 后步清,已生成此次的快照,校驗(yàn)和為 dd90005
note : git commit -a -m ''add new"虏肾, 可以跳過git add
6. 刪除提交
git rm后廓啊,重新提交,文件在工作目錄和暫存區(qū)中都被刪除封豪。
分支
git的原理由5個(gè)對(duì)象實(shí)現(xiàn)谴轮,想知道具體的可以搜下資料看看,這里主要講如何解決背景出現(xiàn)的問題吹埠。
git log --oneline --decorate --graph --all //先執(zhí)行此命令查看工作目錄所處的分支
根據(jù)上圖可以看到工作目錄處于master分支第步,HEAD指向master分支,流程圖:
1.個(gè)人信息需求
git branch issue //此時(shí)HEAD還是指向master
創(chuàng)建issue分支缘琅,這點(diǎn)很重要粘都,當(dāng)有新需求過來的時(shí)候,一定要?jiǎng)?chuàng)建自己的分支刷袍。保持主分支為原樣翩隧。
git checkout issue //切換到issue分支,HEAD指向issue
流程圖:
2. 碼碼碼碼碼碼
在issue分支下呻纹,工作堆生,并提交到暫存區(qū)
可以看到生成了校驗(yàn)碼為c7abbef的快照滚局,流程圖:
3. 檔案信息修復(fù)
git checkout master //切換master主分支,HEAD指向master
git branch issue2 //創(chuàng)建issue2分支顽频,HEAD指向master
git checkout issue2 //HEAD指向issue2
修復(fù)bug,同提交太闺,產(chǎn)生3a59570快照糯景。
此時(shí)流程圖:
git checkout master //切換master分支
git merge issue2 //issue2分支的內(nèi)容合并到master分支
流程圖:
此時(shí)的合并只是將master指針前移。
git branch -d issue2 //刪除issue2分支
4. 繼續(xù)個(gè)人信息
git checkout issue //切換issue分支
碼碼碼碼碼省骂。蟀淮。。钞澳。
功能實(shí)現(xiàn)繼續(xù)提交
流程圖:
git checkout master //切換到master主分支
git merge issue //合并issue分支到master主分支
此時(shí)的合并就不是簡(jiǎn)單的將master指針前移怠惶,因?yàn)檫@兩個(gè)分支的共同分支是9ffb7ee,而不是3a59570轧粟,此次合并做了兩次操作策治,一是將94517a9、9ffb7ee兰吟、3a59570的結(jié)果做了一次新的快照通惫,二是對(duì)結(jié)果做了一次新的提交10af497。
注:此時(shí)如果有文件沖突混蔼,出現(xiàn) CONFLICT (content): Merge conflict 履腋,可以到?jīng)_突的文件中,修改沖突的內(nèi)容惭嚣,再次 git commit -a -m "fix confilct"
關(guān)于git的使用就講到這了遵湖,上面講的這些也只是git的基本使用。
當(dāng)我們?cè)偃ド钊氲牧私獾脑捦硗蹋蜁?huì)發(fā)現(xiàn)用git也可以實(shí)現(xiàn)運(yùn)維系統(tǒng)發(fā)布那一套流程延旧,每一個(gè)開發(fā)者將自己私有庫(kù)的更新發(fā)布到自己的公共庫(kù)上,再由管理者去拉取開發(fā)者的公共庫(kù)更新槽地,管理者發(fā)現(xiàn)沒有問題垄潮,再推送到主倉(cāng)庫(kù)。