Git常用命令及問題
-
列舉工作中常用的幾個git命令?
顯示某次提交的內容 :git show $id
新增文件的命令:git add file或者git add .
提交文件的命令:git commit –m或者git commit –a
查看工作區狀況:git status –s
push到遠程倉庫:git push origin 分支名
拉取合併遠程分支的操作:git fetch/git merge或者git pull
查看提交記錄命令:git reflog
-
能不能說一下git fetch和git pull命令之間的區別?
簡單來說:git fetch branch是把名爲branch的遠程分支拉取到本地;而git pull branch是在fetch的基礎上,把branch分支與當前分支進行merge;因此pull = fetch + merge。 -
如果本次提交誤操作,如何撤銷?
在工作區刪除修改:git checkout – file(用版本庫中的文件替換修改)
在暫存區刪除修改:git reset HEAD file 回退到工作區,再git checkout – file
刪除版本庫修改:版本回退git reset –hard HEAD(HEAD指向當前版本,HEAD指向上一版本,HEAD^^指向上上版本) -
爲什麼會產生衝突?
因爲在合併分支的時候,master分支和dev分支恰好有人都修改了一個文件,Git不知道應該以哪一個人的文件爲準,所以就產生衝突了。
如何解決?
發生衝突,在IDE裏面一般都是對比本地文件和遠程分支的文件,然後把遠程分支上文件的內容手工修改到本地文件,然後再提交衝突的文件使其保證和遠程分支的文件一致。這樣纔會消除衝突,然後提交自己修改的部分。特別要注意下,修改本地衝突文件使其與遠程倉庫的文件保持一致後,需要提交後才能消除衝突,否則無法繼續提交。必要時可與同事交流,消除衝突。
發生衝突,也可以使用命令
- 通過git stash命令,把工作區的修改提交到棧區,目的時保存工作區的修改;
- 通過git pull命令,拉取遠程分支上的代碼併合併到本地分支,目的是消除衝突;
- 通過git stash pop命令,把保存在棧區的修改部分合併到最新的工作空間中。
-
git的分支管理策略是什麼?
**master主分支:**最爲穩定功能比較完善的隨時可以發佈的代碼,請注意永遠不要在 master 分支上直接開發和提交代碼,以確保 master 上的代碼一直可用;
**dev開發分支:**用做平時開發的主分支,並一直存在,用於時功能最新最全的分支,包含所有要發佈到下一個 release 的代碼,主要用於合併其他分支
feature功能開發分支:用來開發新的功能。
bugfix線上維護Bug分支
**release預發佈分支(測試分支):**用於發佈準備的專門分支。當開發進行到一定程度,或者說快到了既定的發佈日,可以發佈時,建立一個 release 分支並指定版本號(可以在 finish 的時候添加)。開發人員可以對 release 分支上的代碼進行集中測試和修改bug。全部完成經過測試沒有問題後,將 release 分支上的代碼合併到 master 分支和 develop 分支
steady分支(版本發佈分支)
-
新建git功能分支的步驟?
git branch name 創建名字爲name的branch
git checkout xxx_dev 切換到名字爲xxx_dev的分支
git pull 從遠程分支拉取代碼到本地分支
Git checkout -b main_furture_xxx 創建並切換到 main_furture_xxx 分支
Git push origin main_furture_xxx 執行推送的操作,完成本地分支向遠程分支的同步
在執行git pull的時候,提示當前branch沒有跟蹤信息: 01: git pull origin 遠程分支名稱 02:git branch --set-upstream-to=origin/遠程分支名稱 本地分支名 (先建立遠程分支與本地分支的連接,再pull) git pull 再pull
-
說明Git合併的兩種方法以及區別?
git merge和git rebase
git merge branch會把branch分支的差異內容pull到本地,然後與本地分支的內容一併形成一個committer對象提交到主分支上,合併後的分支與主分支一致;
git rebase branch會把branch分支優先合併到主分支,然後把本地分支的commit放到主分支後面,合併後的分支就好像從合併後主分支又拉了一個分支一樣,本地分支本身不會保留提交歷史。 -
git fetch、git merge、git pull的區別?
git pull相當於git fetch和git merge,即更新遠程倉庫的代碼到本地倉庫
git fetch:相當於從遠程獲取最新版本到本地。不會自動merge
git merge:將內容合併到當前分支
git pull:相當於是從遠程獲取最新版本並merge到本地
-
你使用過git stash命令嗎?你一般什麼情況下會使用它?
git stash:是把工作區修稿下內容存儲在棧區
以下情況會使用:
- 解決衝突文件時,會先執行git stash,然後解決衝突;
- 遇到緊急開發任務但目前任務不能提交時,會先執行git stash,然後進行緊急任務的開發,通過git stash pop取出棧區的內容繼續開發;
- 切換分支時,當前工作空間內容不能提交時,會先執行git stash再進行分支切換。