赞
踩
直接使用:git log --pretty=oneline --abbrev-commit --all --graph即可,可以实现和idea的线路图差不多的效果
具体演示:
注意:如果add进暂存区的文件被修改了,他的status也会变成红色,操作同上继续add再commit,这样查询git log就会有两次提交记录了,如下:
具体操作:
解释:假设有master分支和它的子分支dev01,我们在dev01上创建或者修改某些文件并add然后commit到本地仓库,此时还没有和master分支进行merge合并操作,当执行删除dev01分支是,git会认为你是误操作,所以会提示你,如果仍然需要删除执行第二个命令即可
该章节演示的为本地仓库多分支合并情况下的冲突问题,一般情况下开发人员克隆远端开发分支后会创建自己的功能分支,后续的开发都提交至远端功能分支,所以实际开发中在开发人员的本地仓库不会出现冲突(因为本地功能分支根本就没有进行merge操作,提交也是提交到远程仓库的功能分支),经过CodeReview之后在远程仓库中将功能分支合并入开发分支时可能出现冲突(这个和本章节的本地解决冲突一个道理【因为发生冲突是由远程仓库中的功能分支和开发分支合并引起的,和本地的两个分支合并出现冲突是一样的】-冲突问题还可参考下面的远程解决冲突章节)
当两个分支上对文件的修改可能会存在冲突,例如同时修改了同一个文件的同一行,这时候就需要手动解决冲突,解决步骤如下:
常规下:
执行本章节的前提是在gitee上创建一个远程仓库(空白的,主分支都没有的)
命令:git push [-f] [–set-upstream] [远端名称 [本地分支名][:远端分支名]],示例:git push origin master:master
在实际开发中存在着另外一种情况,也就是远程仓库中只有开发分支没有功能分支,开发人员将远端开发分支克隆下后不需要创建功能分支直接进行修改,那么这时候假设有两个开发人员a和b同时克隆了开发分支,他们两对同一个文件123.txt文件的同一处地方进行了修改,下面分情况讨论:
a修改后比b先推送到了远程仓库,b在克隆修改后没有执行git pull拉取最新远端代码而直接push推送远程仓库,此时会提示push失败并提示你push前使用git pull
a修改后比b先推送到了远程仓库,b在克隆修改后在push之前先执行了pull拉取操作,由于pull中包含了 merge合并操作,此时会提示自动合并是失败需要手动解决冲突,
这时123.txt文件会变成包含<<<===>>>内容的东西
,这是git提示你需要手动解决冲突,此时手动修改这个文件(具体解决参考上述的本地解决冲突)并再次执行add->commit->push操作即可提交成功。
因此可以得出在代码push推送前我们需要先pull拉取最新代码手动解决冲突
打开settings搜索git,在右侧选择git安装目录下的git.exe文件并点击Test测试,成功后点击apply保存即可
通过实际操作展示
完成上面的操作后我们点击如下操作克隆一份远程仓库代码
注意克隆下来的代码和之前那份是一模一样的,他们的log也是一模一样的,都会有完整的提交信息
接下来演示push的冲突解决,首先在git-test工程的App.java中随意添加几行代码
执行commit->push操作提交远程仓库,提交信息为[git-test修改App.java文件]
此时在git-test工程中的git log能查看到最新修改App.java的提交信息,而git-test1工程是看不到的,那么这个时候git-test1工程把App.java文件也做相同的修改如图:
执行commit->push操作提交远程仓库,提交信息为[git-test1修改App.java文件]
这里是因为远程仓库代码以及被git-test工程刚才的提交修改了,提示你需要先合并手动解决冲突后再提交,这里我们选择Merge合并:
点击Apply之后,App.java文件恢复正常,变为白色,此时无需commit直接push即可推送到远程仓库,此时log变化为:
这个时候再切换到git-test工程执行pull即可获取最新代码和git-test1保持一致
总结:在每次需要push代码之前先点击蓝色pull按钮获取远端服务器最新代码由于pull=fetch+merge,所以会在这里可以进行手动代码合并,合并之后再push就不会出现推送被拒绝的情况了
IDEA右下角会显示当前分支,点击展开能看到三个栏位,Recent、Local、Remote,分别对应的是最近使用、本地分支、远程分支。选择想要拉取得远程分支点击cheackout即可拉取并切换,在对应位置右键可以新建分支
具体场景:一般是在gitee上创建仓库时创建了master分支后自带两个readme文件(手动在gitee上创建文件都会出现该问题),此时如果工程不是克隆下来的,而是通过在本地创建文件夹Create Git Repository初始化后的空白工程,在pull时会出现改报错,是因为远程厂库有提交的文件,本地仓库和远程仓库没有关联git认为这两仓库没有关系
解决:
具体场景:当前分支代码未提交时IDEA是不允许直接切换分支的如果强行切换会导致未提交的代码消失,因此可以使用git stash(git的命令)和shelve(IDEA的工具)解决
选择需要暂存的文件如图点击填入暂存信息,之后文件会变为修改之前的效果,但是已经把修改的内容存入内存了,此时可以切换分支,后续操作完成切换回来该分支UnStash操作还原之前的代码:
**注意:**切换回来暂存了内容的分支后如果没有UnStash操作直接写代码后再UnStash会报错提示恢复将会覆盖你写的内容所以不能操作。
Unshelve恢复代码
这里恢复代码和上述的stash的注意部分的区别在于如果这里恢复出现冲突会提示让你手动解决,所以功能更强大推荐使用
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。