一、 創建與合並分支
1、 從master分支創建dev分支並切換到dev分支:
git checkout master
git checkout -b dev
其中,git checkout -b dev 等價於:
git branch dev
git checkout dev
查看本地當前的分支,分支前面帶“*”表示當前分支,剩下的分支表示本地有的分支:
git branch
查看遠程全部的分支,白色的表示本地有的,紅色的表示本地沒有,僅在遠程存在:
git branch -a
2、修改代碼、提交代碼(當前的操作是在dev分支上進行)
git add a.html git commit -m "提交文件a.html"
3、分支合並(將dev合並到master)
git checkout master
git merge dev
4、合並完成后,刪除dev分支.(刪除dev分支時,注意我們當前所在的分支不能是dev分支)
git branch -d dev
5、刪除后,查看分支(此時看不到dev分支了)
git branch
6、總結 :工作中經常從master創建新的分支,具體操作如下:
git checkout master git checkout -b issues1234 git push origin issues1234 git add .. git commit -m "***" git push origin issues1234
注意:將本地分支branch1推到遠端的branch2操作步驟:
git push origin branch1:branch2
7、刪除分支
git branch -D issues1234 //本地強制刪除分支issues1234
git push origin :issues1234 //推到遠程
二、 解決沖突
1、發生沖突的文件
-
<<<<<<< HEAD
-
Creating a new branch is quick & simple.
-
=======
-
Creating a new branch is quick AND simple.
-
>>>>>>> feature1
其中,git使用<<<<<<<
,=======
,>>>>>>>
標記文件中自己和別人產生沖突的部分。
在<<<<<<<
,=======
之間為自己的代碼;
=======
,>>>>>>>
之間為別人的代碼。
如果保留自己的代碼,將別人的代碼刪掉即可。
2、沖突解決后提交
git status git add *** git commit -m "fix conflict" git push origin 分支名
三、Bug分支
1、儲藏更改:將當前更改的代碼儲藏起來,等以后恢復使用
git stash
2、恢復儲藏的代碼
git stash pop //恢復的同時把stash內容刪掉 或者 git stash apply //恢復stash,但是stash內容並不刪除 git stash drop //在上面操作的基礎上,以此來刪除stash
注: git stash list //查看全部的stash列表。
3、將stash空間清空
git stash clear
4、git stash pop 和 git stash apply 區別
原來git stash pop stash@{id}命令會在執行后將對應的stash id 從stash list里刪除,而 git stash apply stash@{id} 命令則會繼續保存stash id。
四、版本回退
1、回退至上一個版本
git reset --hard HEAD
2、回退至指定版本
git reset --hard 版本號
3、查看以往版本號(本地的commit)
git reflog
4、查看各版本號及信息(所有的commit:本地commit + 其他同事的commit)
git log
五、撤銷修改
1、撤銷修改(git add/rm 之前)
如果git add 之前修改了文件:
git checkout -- file_name
指定文件 或者 git checkout -- .
撤銷所有
如果git add 之前刪除了文件:直接使用了rm刪除(在本地版本庫中)和上面的撤回命令一樣
git checkout -- file_name 指定文件 或者 git checkout -- . 撤銷所有
2、git add/rm 之后,還未git commit
第一步:從暫存區撤出
git reset HEAD <file>
reset 某個文件
或者
git reset HEAD .
reset 所有
第二步:如果是 git rm 的文件,需要執行下面的,把它撤回來,add 的文件不能用(用了會撤回修改,如果想撤回修改前的,也可以用下面的命令)
git checkout -- file_name
注:如果執行 git checkout -- . 則會吧,之前add 更改的文件也給撤回了;
3、撤銷修改 git commit -m "" 、還未執行git push
- 1. 找到上次git commit的 id
git log
找到你想撤銷的commit_id
- 2. git reset --hard commit_id
完成撤銷,同時將代碼恢復到前一commit_id 對應的版本。(不保留commit 之前修改的代碼,reset之后,代碼回滾到上個版本)
- 3. git reset commit_id
完成Commit命令的撤銷,但是不對代碼修改進行撤銷,可以直接通過git commit 重新提交對本地代碼的修改。(保留commit之前修改的代碼,撤銷后,代碼是修改后的狀態,還能繼續修改;)
六、對於已經push的版本,進行回退
1、第一步:
git reset --hard 版本號 //本地回退到指定的版本
2、第二步:
git push -f origin dev //將遠程的也回退到指定版本
七、本地同步遠程刪除的分支
git fetch origin -p
//用來清除已經沒有遠程信息的分支,這樣git branch -a 就不會拉取遠程已經刪除的分支了
八、刪除掉沒有與遠程分支對應的本地分支
從gitlab上看不到的分支在本地可以通過git branch -a 查到,刪掉沒有與遠程分支對應的本地分支:
git fetch -p
九、查看遠程庫的一些信息,及與本地分支的信息
git remote show origin
十、git stash臨時保存本地操作
1、使用git stash
就可以將你當前未提交到本地(和服務器)的代碼推入到Git的棧中,這時候你的工作區間和上一次提交的內容是完全一樣的。
2、再切換到別的分支改緊急bug。
3、改完后,切到剛才的分支,使用git stash apply
將以前一半的工作應用回來。
也許有的人會說,那我可不可以多次將未提交的代碼壓入到棧中?答案是可以的。當你多次使用git stash
命令后,你的棧里將充滿了未提交的代碼,這時候你會對將哪個版本應用回來有些困惑,git stash list
命令可以將當前的Git棧信息打印出來,你只需要將找到對應的版本號,例如使用git stash apply stash@{1}
就可以將你指定版本號為stash@{1}的工作取出來,當你將所有的棧都應用回來的時候,可以使用git stash clear
來將棧清空。
在這里順便提下git format-patch-n
, n是具體某個數字, 例如git format-patch-1
這時便會根據log生成一個對應的補丁,如果git format-patch-2
那么便會生成2個補丁,當然前提是你的log上有至少有兩個記錄。
十一、git revert、git reset和git checkout的區別
十二、git 清除緩存
清空 git緩存
git add .
git commit -m 'update .gitignore'
讀了下git文檔,才發現,這些東西其實很簡單,很容易理解。cached其實就是暫存區,然后一個是工作的目錄,你的工作目錄的東西做出修改時,會和緩存區進行對比,因此你git status時,會顯示出來這個差異,
因此為了使.gitignore中的內容生效,那么就刪除掉暫存區,然后將所有本地文件追蹤一下,就得到最新的暫存區文件。(用於處理 gitignore 沒有生效)
十三、git 忽略文件夾或者文件 ".gitignore"
如果 git 文件夾的根目錄下有這個文件,則直接填入進去;如果沒有的話,git根目錄新建文件 .gitignore (和.git 在同一文件夾下面)
#忽略該后綴的文件 *.xml *.log *.apk # 忽略文件(文件名相對路徑,*表示忽略文件夾下的所有文件,) 這個是注釋 data/* debug_test/* log/*