寫在前面:
我們之前的分享赂乐,講了很多的git的分支管理捍岳。但是并沒有講git是如何完成一次提交的挪鹏,以及對這些提交我們能做什么操作〗襞粒現在很多同學都習慣使用svn盔然,vscode的git插件來完成提交的操作。并不了解git具體做了什么是嗜。本次分享對pro git一書的學習愈案。
狀態(tài)與工作區(qū)域的概念
先認識一個命令:git status
用于查看處在各個狀態(tài)的文件的整體情況
最基本的git操作
涉及命令:
git add hello.js
git commit -m "create hello.js"
操作流程:
-
使用
git status
查看項目整體狀態(tài), 發(fā)現一個新文件(新增修改狀態(tài))
-
使用
git add hello.js
或git add .
,已暫存
-
使用
git commit -m "create hello.js"
鹅搪,已提交刻帚,形成一次提交記錄
-
再來一次修改提交
針對已經提交的記錄我們能做什么
- 查看提交記錄
git log
- 比較兩次提交的差異
git diff HEAD^ HEAD
- HEAD表示當前提交,HEAD表示上一次提交涩嚣,HEAD^表示上上次...
- HEAD表示當前提交崇众,HEAD~1表示上次,HEAD~2表示上上次
- 合并兩次提交為一次
git rebase -i HEAD~2
看到這里航厚,我們想知道原來的 "update hello.js again"的那次提交記錄那里去了顷歌?
這次的"update hello.js"的提交記錄跟上一次是同一個嗎?
- 每一次當前HEAD發(fā)生改變(包括切換branch, pull, 添加新commit)一個新的紀錄就會被添加到reflog.
-
使用
git reflog
查看所有引用操作
-
使用
git checkout -b again d7c05b1
創(chuàng)建一個新分支
-
使用
git log
查看提交記錄幔睬,我們發(fā)現之前的提交記錄又回來了
-
每次提交都在一條分支上眯漩,只不過有些有名字(master,develop)麻顶,有些沒有名字(d7c05b1)
master赦抖,develop,Tags辅肾,HEAD队萤,d7c05b1都是某一次提交的引用指針。(當然矫钓,有些分支沒有提交到遠程)
-
理解這句話(當然更安全的是推送到遠程)
git對象的概念
-
objects 對象存儲每個文件的修改
Git引用(.git/refs中存放了git的引用要尔,如tag,master, develop)舍杜,引用是可以隨便移動的