項目/倉庫/版本庫
初始倉庫有一個名為 master 的默認分支
HEAD是一個指向當前正在工作的分支的指針
git版本控制系統
github倉庫托管服務,并集成開發社區
本地倉庫
遠程倉庫
本地倉庫
工作目錄(取決于倉庫的當前正在工作的分支)
.git文件夾(git版本控制系統)
暫存區
每次提交,都會保存一份分支提交點的分支快照,以便在將來能夠回到任意一次分支提交點上。
這個快照是分支文件的快照,而不是保存的差異,這采取的是一種以空間換時間的做法,理論上可以將倉庫看成是有0到11111……的過程,而每次改變就是差異的累加,所以保存差異也就能夠得到任意一次提交點了,但是這樣復雜度過高,不利于維護,所以不采用這種方案。
提交:
1. 暫存區的差異一并提交到對應的版本庫分支,每次提交生成一個標示本次提交的哈希值,這個哈希是“分布式計算的”所以能保證多機不會重復,并且這個哈希只取前幾位(一般5~6位)都能取到,相當于可以簡寫吧。
2. 每次提交也會保存一份當前分支的文件快照(上面已經提到過)
3. 提交后,對應分支HEAD更新,向前推動一步。
4. 每次會將 -m 提交說明“更新到對應的全部差異文件中”(相當于解釋這次為什么提交,以及此次提交時哪些變化發生了變化,文件夾也有這個提交描述,說明文件夾也被當文件對待了),需要注意的是,這個提交描述是與提交是對應的,也就是這個描述是指向提交的。
合并是一種同步
克隆也是一種“同步”
pull也是一種“同步”(其實也是一種合并)
(合并可能有多種合并方式,不同的合并方式產生不同結果,比如“均等合并”,“合并生成新分支”??????)
合并這個同步會使雙方產生一個相同的“標記因子”
此后的每次提交都會試“標記因子”發生改變
當雙方合并時發現雙方的“標記因子”都已發生改變,都不是最初的,即后來都做過提交的話
那么就不能進行“快速合并”了,只能通過手動處理后在進行手動合并了。
合并后,雙方的“標記因子”又一致了。
此后,循環往復此過程。
現在可是看出來了,“標記因子”其實就是提交哈希(分布式算法,保證不會重復)
對于每個分支的每個提交,哈希值都是唯一的。
實際上合并產生的一個相同的“標記因子”其實就是“一次合并提交”產生的一個相同的提交哈希。此時也認為兩個分支是“相等(此刻文件上是相等的)”的。
要搞明白提交點,工作區未提交的到暫存區的修改,暫存區與分支,提交的關系,工作區是每個提交,每個分支獨立的還是怎么處理的,必須把概念弄清楚,才能保證工作的可靠性。保證平時代碼維護的工作。
git reset --hard ----
請在準備切換版本前檢查當前工作狀態,否則切換后將會丟失當前工作內容(當前工作區為提交到暫存區的修改,和當前暫存區),請謹慎使用會導致丟失當前工作內從的操作,否則后果自負!同時經常使用git status 檢查當前工作狀態也是好的習慣。(提示,關閉電腦,退出git bash不會影響工作內容,下次開始還能接著工作)
git reset命令既可以回退版本,也可以把暫存區的修改回退到工作區。當我們用HEAD時,表示最新的版本。
“[再用git status查看一下,現在暫存區是干凈的,工作區有修改](http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001374831943254ee90db11b13d4ba9a73b9047f4fb968d000)”上面可能有點說錯了或表述有偏差。
**只有當工作狀態是干凈的,即工作區是干凈的,暫存區也是干凈的,才能說明當前工作完成了(當前工作目錄和當前版本庫文件一致),否則沒完成工作,后果自負哦。**
>[info] git跟蹤文件,應該是計算文件的哈希Hash的,當多次修改文件,但是文件內容最終沒有變化時,git不會認為該文件發生了修改,所以git是跟蹤文件內容的。這注意到這點,像Windows的記事本和Sublime Text則不是這樣的,只要編輯了文件,那么輸入一個字符,又馬上刪除了,文件內容沒有發生改變,對編輯器來說,也認為你做了修改,如果你沒有Ctrl+S保存關閉文件的則會提示你有未保存的修改,你必須先保存或者放棄更改才能關閉。(看云網頁版的這個文檔編輯器跟git差不多,就像是input change事件)
[這才是真正的Git——Git內部原理揭秘!](https://mp.weixin.qq.com/s/UQKrAR3zsdTRz8nFiLk2uQ)
[Tech Talk\_ Linus Torvalds on git](https://m.youku.com/video/id_XNTIxMjg3MzA0.html?spm=a1z3jc.11711052.0.0&isextonly=1&source=&ishttps=1)
- 說明
- git配置
- git與github的關系
- 基礎概念
- git命令
- git init
- git status
- git diff
- git log
- git reflog
- git add
- git commit
- git reset
- git checkout
- git rm
- git stash
- git remote
- git push
- git clone
- git branch
- git fetch
- git merge
- git rebase
- git pull
- git tag
- 建立版本庫
- 分支合并
- 遠程庫別名
- Pull requests
- 擴展知識
- 功能文件
- 差異看法
- 注意細節
- github移動端
- git工作系統理解
- 倉庫嵌套問題
- 倉庫的使用問題
- 常用命令
- 學習資料
- 學習總結
- 示例文件
- README.md
- CONTRIBUTING.md
- .gitignore
- coding
- 大小寫問題
- 如何貢獻
- 使用賬號密碼clone
- git目錄分析
- HEAD
- 代碼部署問題
- 開發流程
- 指定公鑰文件