Git 總結(jié)
一、創(chuàng)建與合并分支
1、從master分支創(chuàng)建dev分支并切換到dev分支
git checkout master
git checkout -b dev
其中,git checkout -b dev 等價(jià)于:
git branch dev
git checkout dev
查看本地當(dāng)前的分支,分支前面帶“*”表示當(dāng)前分支,剩下的分支表示本地有的分支。
git branch
查看遠(yuǎn)程全部的分支,白色的表示本地有的,紅色的表示本地沒(méi)有,僅在遠(yuǎn)程存在。
git branch -a
2、修改代碼、提交代碼(當(dāng)前的操作是在dev分支上進(jìn)行)
git add test.py
git commit -m "提交test.py"
一般 -m 適合簡(jiǎn)單的message,需要寫(xiě)全面一點(diǎn)直接 git commit 后進(jìn)入 vim 模式編輯,保存退出后自動(dòng)提交
3、分支合并(將dev合并到master)
git checkout master
git merge dev
最好不要使用merge,使用rebase
git checkout dev
git rebase master
4、合并完成后,刪除dev分支.(刪除dev分支時(shí),注意我們當(dāng)前所在的分支不能是dev分支)
git branch -d dev
5、刪除后,查看分支(此時(shí)看不到dev分支了)
git branch
6、總結(jié) :工作中經(jīng)常從master創(chuàng)建新的分支,具體操作如下:
創(chuàng)建新分支:
git branch -b [新分支名稱(chēng)] 創(chuàng)建新分支,-b 參數(shù)為創(chuàng)建分支的同時(shí),切換到該分支上
-
git branch 查看本地分支
git checkout 分支名稱(chēng) 切換分支
修改代碼并提交
/ after modifing some files
git add files (git add .) 如果發(fā)現(xiàn)提交錯(cuò)了 使用 git restore --staged . 撤銷(xiāo)在暫存區(qū)的提交
git status 可以看到未提交的狀態(tài)
git commit
git status 可以看到已經(jīng)提交的狀態(tài)
git log 查看提交記錄
切回master更新代碼
- git checkout master 切換回master分支
- git pull -r 拉取最新代碼 -r 代表rebase
切回新分支rebase
git checkout [新分支名稱(chēng)]
git rebase master rebase到master
git review -t [feature-id] master review到master分支,-t 參數(shù)指 topic Topic相當(dāng)于gerrit里把相同topic都?xì)w為一類(lèi)
二、解決沖突
1、發(fā)生沖突的文件
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1
其中,git使用 <<<<<<<,=======,>>>>>>>
標(biāo)記文件中自己和別人產(chǎn)生沖突的部分。
在 <<<<<<<,=======
之間為自己的代碼;=======,>>>>>>>之間為別人的代碼。
如果保留自己的代碼,將別人的代碼刪掉即可。
2、沖突解決后提交
git status
git add ***
git commit -m "fix conflict"
git push origin 分支名
三、Bug分支
1、儲(chǔ)藏更改: 將當(dāng)前更改的代碼儲(chǔ)藏起來(lái),等以后恢復(fù)使用
git stash
2、恢復(fù)儲(chǔ)藏的代碼
# 恢復(fù)的同時(shí)把stash內(nèi)容刪掉
git stash pop
# 通過(guò) git stash list,查看本地所有的stash,如果要恢復(fù)第一個(gè)就執(zhí)行:
git stash apply stash@{0}
# 恢復(fù)stash,但是stash內(nèi)容并不刪除
git stash apply
# 在上面操作的基礎(chǔ)上,以此來(lái)刪除stash
git stash drop
# 查看全部的stash列表
git stash list
git stash pop 和 git stash apply 區(qū)別
原來(lái)git stash pop stash@{id}命令會(huì)在執(zhí)行后將對(duì)應(yīng)的stash id 從stash list里刪除,
而 git stash apply stash@{id} 命令則會(huì)繼續(xù)保存stash id。
3、將stash空間清空
git stash clear
四、版本回退
1、回退至上一個(gè)版本
git reset --hard HEAD~1
git reset (–mixed) HEAD~1
回退一個(gè)版本,且會(huì)將暫存區(qū)的內(nèi)容和本地已提交的內(nèi)容全部恢復(fù)到未暫存的狀態(tài),不影響原來(lái)本地文件(未提交的也不受影響)
git reset –soft HEAD~1
回退一個(gè)版本,不清空暫存區(qū),將已提交的內(nèi)容恢復(fù)到暫存區(qū),不影響原來(lái)本地的文件(未提交的也不受影響)
git reset –hard HEAD~1
回退一個(gè)版本,清空暫存區(qū),將已提交的內(nèi)容的版本恢復(fù)到本地,本地的文件也將被恢復(fù)的版本替換
2、回退至指定版本
git reset --hard 版本號(hào)
3、查看以往版本號(hào)(本地的commit)
git reflog
4、查看各版本號(hào)及信息(所有的commit:本地commit + 其他同事的commit)
git log
五、撤銷(xiāo)修改
1、撤銷(xiāo)修改
git checkout -- test.py
分兩種情況分析:
還沒(méi)有執(zhí)行 git add 操作,執(zhí)行上面的操作后,會(huì)恢復(fù)到和版本庫(kù)中一模一樣的版本狀態(tài)。
②: 執(zhí)行了git add ,還沒(méi)執(zhí)行 git commit ,再執(zhí)行上面的操作后,會(huì)恢復(fù)到git add 結(jié)束后的狀態(tài)
注:一旦執(zhí)行了git commit -m "*",就不能再使用上面的命令回退。
2、撤銷(xiāo)新建文件
比如新建一個(gè)aa.html頁(yè)面,并未執(zhí)行g(shù)it add ,即沒(méi)有被git追蹤,此時(shí)如果想撤銷(xiāo)新建動(dòng)作,可執(zhí)行:
git clean -f ../test.py
3、撤銷(xiāo)新建文件夾
比如新建一個(gè)文件夾"demo",并未執(zhí)行g(shù)it add ,即沒(méi)有被git追蹤,此時(shí)如果你想撤銷(xiāo)新建動(dòng)作,可執(zhí)行:
git clean -df ./demo
六、對(duì)已push版本進(jìn)行回退
1、第一步:
# 本地回退到指定的版本
git reset --hard 版本號(hào)
2、第二步:
# 將遠(yuǎn)程的也回退到指定版本
git push -f origin dev
七、本地同步遠(yuǎn)程刪除的分支
# 用來(lái)清除已經(jīng)沒(méi)有遠(yuǎn)程信息的分支,這樣git branch -a 就不會(huì)拉取遠(yuǎn)程已經(jīng)刪除的分支了
git fetch origin -p
八、刪掉未與遠(yuǎn)程分支對(duì)應(yīng)的本地分支
從gitlab上看不到的分支在本地可以通過(guò)git branch -a 查到,刪掉沒(méi)有與遠(yuǎn)程分支對(duì)應(yīng)的本地分支:
git fetch -p
九、查看遠(yuǎn)程庫(kù)與本地分支的信息
git remote show origin
十、標(biāo)簽管理
1、給當(dāng)前分支最新commit打標(biāo)簽
git tag v1.0.0
2、比如現(xiàn)在周五,要給周一某個(gè)commit打標(biāo)簽,應(yīng)執(zhí)行以下步驟:
(1)、查看log日志,找到相應(yīng)的commit版本號(hào)
git log --pretty=oneline --abbrev-commit
// 顯示如下commit,比如我想在 "34372b05"這個(gè)commit打標(biāo)簽44d2e20b fix bug34372b05 fix bug29554931 fix bug
(2)、給指定的commit打標(biāo)簽
git tag v1.0.0 34372b05
(3)、創(chuàng)建的標(biāo)簽只存在本地,推至遠(yuǎn)程
git push origin v1.0.0
(4)、一次性推送未推至遠(yuǎn)程的本地標(biāo)簽
git push origin --tags
(5)、查詢(xún)所有標(biāo)簽
git tag
(6)、查詢(xún)標(biāo)簽詳細(xì)信息
git show v1.0.0
(7)、刪除本地標(biāo)簽
git tag -d v1.0.0
(8)、刪除遠(yuǎn)程標(biāo)簽
# 先從本地刪除
git tag -d v1.0.0
# 然后從遠(yuǎn)程刪除
git push origin :refs/tags/v1.0.0
# 最后可以在gitlab上查看是否真正的刪除了標(biāo)簽
3、創(chuàng)建帶有說(shuō)明的標(biāo)簽,用-a指定標(biāo)簽名,-m指定說(shuō)明文字
# git tag -a 版本號(hào) -m 說(shuō)明信息 commit版本號(hào)
git tag -a v1.0.0 -m "version 1.0.0 released" 34372b05(commit版本號(hào))
# 查看標(biāo)簽詳細(xì)信息
git show v1.0.0