對分支進行操作
- 查看當前分支:
git status
- 查看某個項目的所有分支:
git branch
- 切換到指定的分支:
git checkout branchName
- 合併某分支到當前分支:
git merge branchName
- 刪除某個分支:
git branch -d branchName
- 創建某個分支並切換到該分支上:
git checkout -b branchName
添加文件到git倉庫
- 添加修改的文件到本地倉庫:
git add filePath
(將文件添加到暫存區, filePath爲要添加的文件的路徑) - 一次提交添加過的文件:
git commit -m "註釋內容"
(將暫存區的所有文件提交到本地倉庫的分支上) - 推送代碼到遠程倉庫:
git push
(將代碼推送到遠程的git倉庫的對應的分支上)
特別注意:git有一個暫存區的概念,git add
命令就是將工作區的修改添加到暫存區,最後通過git commit
一次性將暫存區中的文件提交到倉庫的分支上。
回退到某個版本
- 查看已經提交的歷史,以便查看回退到哪個版本:
git log
- 回滾到歷史的某個版本之後,想要再次回到原來的某個版本:
git reflog
- 當提交出現問題,回退到某個版本:
git reset --hard commit_id
對比工作區和分支代碼
- 對比工作區項目和分支的區別:
git diff
- 對比工作區項目的某個文件和分支上某個文件的區別:
git diff HEAD --
本地項目的文件路徑
對修改文件進行還原
- 工作區的文件修改出錯想要還原回修改前的狀態:
git checkout -- 本地項目的文件路徑
(該文件沒有添加到暫存區) - 工作區的文件已經添加到暫存區,這種情況下的還原分爲兩步:第一步先把暫存區中的修改進行還原,可以使用命令
git reset HEAD -- 項目的文件路徑
;第二步再把工作區中的修改進行還原,可以使用命令git checkout -- 本地項目的文件路徑
。
對工作區刪除的文件進行還原
- 刪除工作區的文件:
git rm 本地項目的文件路徑
- 如果工作區的文件被誤刪除,這種情況下的還原分爲兩步:第一步先把暫存區中的修改進行還原,可以使用命令
git reset HEAD -- 項目的文件路徑
;第二步再把工作區中的修改進行還原,可以使用命令git checkout -- 本地項目的文件路徑
。
解決衝突
什麼情況下會出現衝突呢?兩個分支都對同一個文件進行了修改,在進行文件合併時,會遇到衝突的問題。這裏會分爲兩種情況,一種情況是工作區修改的文件沒有commit,另一種情況是已經進行了commit。
- 針對第一種情況,可以使用命令:
git stash
,然後再進行merge
,最後解決衝突,提交即可 - 針對第二種情況,直接merge,解決衝突,提交即可。
- 合併分支:
git merge --no-ff -m "註釋" branshName
(這裏採用強制禁用Fast forward模式,Git就會在merge時生成一個新的commit,這樣,從分支歷史上就可以看出分支信息) - 在代碼合併時,假如要提交到遠程倉庫的dev分支,首先要將dev的代碼合併到自己的分支上,解決完衝突之後,把代碼提交到分支上之後。再切換到dev分支上,將自己分支的代碼合併到dev上
多分支同時開發
如果我們在dev分支上進行開發,開發了一半。這時需要再創建一個分支,處理其他的bug。這時不能提交開發了一半的代碼。此時需要切換到一個新的分支上來進行開發。這時怎麼處理這些未開發完的代碼呢?將開發了一半的代碼先‘凍結’
- 使用
git stash
先‘凍結’代碼 - 如果在其他分支上開發完成了,需要重新切回分支再繼續開發。首先通過命令
git stash list
來查看,然後通過git stash pop
來恢復‘凍結’’的代碼。
推送分支
- 推送代碼之前要首先更新一下分支的代碼:
git pull
,遇到衝突就處理衝突等。 - 將分支代碼推送到遠程倉庫:
git push origin branchName
- 查看遠程倉庫的版本信息:git remote -v
寫在最後:git的分支的創建時只是創建了一個指針,當前的分支會指向最新的提交,HEAD會指向當前的分支。代碼每次提交,當前的分支會向前移動一步。所以我們會看到分支會是一條線,隨着不斷的提交,這條線會變得越來越長。所以git的創建分支和切換分支時都非常的快,其實只是創建了一個指針,在切換分支時,改變了分支的指向而已。