git 使用merge 对本地分支进行合并 并进行代码提交的流程
只有当将修改内容commit后 该修改才完全生效,进行merge前需要将两个分支修改的内容都进行commit
- 只有当将修改内容commit后 该修改才完全生效,进行merge前需要将两个分支修改的内容都进行commit 。
- 假设本地两个分支 用于开发的分支:dev 用于同步远程仓库的分支:master 。
- 切换到master分支 进行 (git pull origin 远程分支) 不要在master 分支进行开发(也不要在master分支进行add commit),以此保证当在master分支进行git pull 不会产生冲突(如果不慎在master分支修改了内容, 可以先撤销所有修改,再将版本回退到没有冲突的地方) 。
- 在master分支拉取了最新代码后,如果没有在master分支进行过开发,那么这个分支内容就是没有冲突的最新的内容 。
- 切换到dev分支, 将所有的修改进行add 以及commit 然后 git merge master 将master 的分支合并过来
- merge 遇见冲突后会直接停止,等待手动解决冲突并重新提交 commit 后,才能再次 merge 。
- merge 是一个合并操作,会将两个分支的修改合并在一起,默认操作的情况下会提交合并中修改的内容
# 需要将dev分支的修改都进行commint
python@ubuntu:~/Desktop/learning_git$ git commit -m "a=dev"
# 输出内容, 提示该commit做了哪些修改
[dev b8b4023] a=dev
file changed, 1 insertion(+), 1 deletion(-)
python@ubuntu:~/Desktop/learning_git$ git status
位于分支 dev
无文件要提交,干净的工作区
# 将master分支的代码合并过来(在此之前要保证master分支的代码是最新的代码)
python@ubuntu:~/Desktop/learning_git$ git merge master
# 提示有冲突, 合并失败, 根据提示找到文件, 解决冲突后, 重新git add 和 git commit
自动合并 1.txt
冲突(内容):合并冲突于 1.txt
自动合并失败,修正冲突然后提交修正的结果。
python@ubuntu:~/Desktop/learning_git$ git status
位于分支 dev
您有尚未合并的路径。
(解决冲突并运行 "git commit")
未合并的路径:
(使用 "git add <文件>..." 标记解决方案)
双方修改: 1.txt
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
- 进入文件修改冲突内容
1 <<<<<<< HEAD
2 a=dev
3 =======
4 a=6
5 >>>>>>> master
<<<<<<<<HEAD
a=dev
=======
(当前所在分支的内容)
=======
a=6 >>>>>>> master
(master分支的内容,修改冲突)
修改完冲突以后重新 git add git commit 然后就可以 git push 提交代码了.这里如果因为某些原因,本地的开发分支进行了版本回退,这样的话因为本地代码的版本落后于远程的分支,所以git是不允许进行提交代码的,这时就需要确认是否需要保留远程分支的代码,如果需要保留,那么就需要先拉取一下远程分支的代码到本地进行合并,然后再进行开发或修改,如果远程分支的代码是受到污染的,需要保留的是本地分支的代码, 那么就可以放心进行开发,完成后使用命令
git push origin 远程开发分支名称 -f
进行强制性推送代码,覆盖远程分支的代码为当前版本的代码
Git Merge 操作合并代码
命令:
git merge 需要合并的分支名称
例如:本地分支:sun_dev ,需要合并storex 分支,操作如下。
LOLLICUP@DESKTOP-EF95EEJ MINGW64 /d/www/lollicupStore2 (sun-dev)
$ git checkout sun-dev-yang
Switched to branch 'sun-dev-yang'
M media/customer/P/e/Permit.jpg
M media/customer/R/e/Resale_Certificate.pdf
M media/customer/R/e/Reseller_Permit.pdf
M media/customer/S/E/SELLER_PERMIT.pdf
M media/customer/S/e/Seller_Permit.pdf
M media/customer/S/e/Seller_s_Permit.pdf
M media/customer/S/e/Sellers_Permit.pdf
LOLLICUP@DESKTOP-EF95EEJ MINGW64 /d/www/lollicupStore2 (sun-dev-yang)
$ git merge sun-dev
Updating 88e7942e..47d79ab5
Fast-forward
.../customer/account/dashboard/product.phtml | 57 ++++++++++----------
.../default/template/customerproduct/history.phtml | 61 ++++++++++++----------
2 files changed, 62 insertions(+), 56 deletions(-)
LOLLICUP@DESKTOP-EF95EEJ MINGW64 /d/www/lollicupStore2 (sun-dev-yang)
$ git branch
master
storex
sun-dev
* sun-dev-yang
Git如何撤销merge操作
方法:,reset 到 merge 前的版本,然后再重做接下来的操作,要求每个合作者都晓得怎么将本地的 HEAD 都回滚回去:
$ git checkout 【行merge操作时所在的分支】
$ git reset --hard 【merge前的版本号】
LOLLICUP@DESKTOP-EF95EEJ MINGW64 /d/www/lollicupStore2 (sun-dev)
$ git reset --hard 06a54b3575b78b6ba96602cedbc5ba8a6e010690