下載 - 安裝
一、.git是什麼;與svn的區別;在windows上如何安裝
二、操作
2.1、基本操作
- git init
- git add
- git commit -m ‘’
- git diff [] 工作區與某次提交的差異
- git diff -cached [] 暫存區與某次提交的差異,默認爲HEAD
- rm filename 刪除文件(只是從目錄中刪除、如果要從版本庫中刪除,需要再 git commit)
- 查看:
- git log 查看所有版本日誌,被回收的信息不會在這裏看到
- git log --pretty=oneline 查看所有版本日誌簡化信息
- git reflog 查看所有版本日誌,被回收的信息也可以在這裏看到,按經過的順序排列
- git status 查看當前提交情況
- cat filename 查看文件內容(獲取的是暫存區和工作區的文件的內容,如果內容一樣,則不區分)
- cat .git/refs/heads/master 查看分支信息(結果爲該分支指針信息,如e72638jskanj988a8ifji…,長度爲40的字符串)
2.2、版本回退
- git reset HEAD ; 將文件內容從提交區複製到暫存區
- git reset --hard HEAD^; 回退到上一次提交,^ 指上一次
- git reset --hard HEAD~n; 回退到上 n 次提交
- git reset --hard 30945da; 版本回退到某一指定版本,這裏的 30945da 指的是具體版本號
- git reset --mixed 30945da; (此處 mixed 不填效果是一樣的),將當前內容複製到暫存區,此時 HEAD 和 master 同時回退到該指針,此時提交區與暫存區內容一致,與工作區不一致
- git reset --soft 30945da; 將當前內容複製到暫存區和工作區,此時提交區與暫存區、工作區內容一致
2.3、理解工作區、暫存區、提交區(版本庫)、stash區(隱藏區)的區別
- 工作區:就是你在電腦上看到的目錄,比如目錄下testgit裏的文件(.git隱藏目錄版本庫除外)。
- 版本庫:工作區有一個隱藏目錄.git,這個不屬於工作區,這是版本庫。
git add 和 git commit 是把文件先添加到暫存區,再提交到版本庫分支上
2.4、遠程倉庫
- git remote add origin https://github.com/tugenhua0707/testgit.git 關聯遠程倉庫
- git remote -v 查看遠程倉庫的信息
- git pull 或 git pull origin master 獲取
- git fetch 獲取遠程倉庫的提交歷史
- git fetch origin master 修改了本地 origin master 分支
- git merge origin master 完成本地三方合併
- git pull = git fetch + git merge
- git clone = git init + git remote + git pull 完整獲取遠程倉庫
2.5、分支操作
- 分支的增刪改查
git branch 創建分支
git branch -d 刪除分支
git branch -v 查看所有分支
git branch next
git push origin --delete test 刪除遠程 test 分支 - 分支的切換:實際上,HEAD在哪裏,當前分支就是哪個
git checkout 原理:通過移動HEAD檢出版本
git checkout 切換到該分支
git checkout -b 創建並切換到該分支
git checkout 將其引用到任何一個對象上
git checkout - 切換到到上一個分支
git checkout – filename 將文件內容從暫存區複製到工作區
git checkout <指針名> 把 HEAD 切換到該指針上,但會造成 HEAD 與 master 分離,造成 detached head 效果,此時不宜提交,因爲 master 指針沒有回退,當 HEAD 回到 master 上時,之前提交的代碼可能被回收。這種操作一般只用來查看代碼 - 分支的合併
git marge test 把 test 分支合併到當前分支
git marge next --no-ff 不使用 fast-forward
git rebase 修剪提交歷史的基線,即‘變基’
git rebase master 在 master 分支上重演其他分支的所有指針信息,並且合並進來產生新的指針
git rebase --onto master <指針名> 在 master 分支上重演其他分支的最後一次指針信息,並(同上)
注:git rebase 不可在非 master 分支上使用 - stash 區(隱藏區)
git stash save ‘name’ 把工作區和暫存區的內容存到 stash 區
git stash list 查看 stash 區中存了多少條內容
git stash apply stash@{0} 將該條內容恢復到工作區
git stash drop stash@{0} 刪除該條記錄
stash pop = stash apply + stash drop - 分支查看
git cat-file -p HEAD 查看當前分支和其父分支 - git tag
git tag 創建別名
三、原理性問題
-
github上創建一個倉庫後,在本地任意一文件夾git init,然後 git remote add origin + 倉庫地址進行關聯,這時候直接git pull,或 git push 都要加 origin master,這是爲什麼?
你pull操作是要拉取某個分支的代碼,但是你本地沒有任何分支,所以需要指定源(主機名)和分支 -
什麼樣的情況下建立分支?
-
分支 branch
所謂分支(branch)就是指向某個快照的指針,分支名就是指針名。哈希值是無法記憶的,分支使得用戶可以爲快照起別名。而且,分支會自動更新,如果當前分支有新的快照,指針就會自動指向它。比如,master 分支就是有一個叫做 master 指針,它指向的快照就是 master 分支的當前快照。
Git 有一個特殊指針HEAD, 總是指向當前分支的最近一次快照。另外,Git 還提供簡寫方式,HEAD^指向 HEAD的前一個快照(父節點),HEAD~6則是HEAD之前的第6個快照。
每一個分支指針都是一個文本文件,保存在.git/refs/heads/目錄,該文件的內容就是它所指向的快照的二進制對象名(哈希值)。
四、git 在項目中使用時的發現
-
git pull 或 git push 時,當出現了驗證時,填錯了用戶名或密碼,該遠程將拒絕你的訪問,使用 git config --system --unset credential.helper,重置錯誤步驟,可重新來過。
-
git branch --set-upstream-to=origin/feat-les feat-les,把本地 feat-les 分支與遠程 feat-les 關聯