方法一:先pull 再进行commit
此种方法当工作区文件和远程仓库文件有冲突时不能完成pull的,需要先备份工作区文件,恢复文件与远程服务器一致,才能完成pull,然后将本地修改添加进去,commit–push.这种操作修改文件较多时非常麻烦.
1.1 远程仓库文件与工作区文件冲突无法完成pull ,远程仓库文件:
工作区文件:
1.2 此时工作区文件未进行commit操作 ,pull结果如图:
1.3 此时需要恢复工作区文件至未修改前版本
1.4 然后进行pull 结果如图
1.5 将修改部分重新加入 commit push 即可;
方法二:commit—pull
此方法是将工作区文件先进行commit,再执行pull,此时当远程仓库文件与本地仓库文件冲突会进行自动合并,自己的修改也会保留,使用mergetool 进行操作处理,重新commit文件即可.这种方法不用在本地修改,重新恢复添加比较省时省力.
2.1 保存(save)本地工作区修改的代码,根据业务需求来修改,然后保存相关代码
2.2 提交(commit)到本地服务器仓库,进行commit动作,切记是提交到本地服务器仓库
2.3 拉取(pull)远程服务器仓库的代码, 如图:pull成功,但是自动合并,文件显示冲突
2.4 合并(MerageTool)本地服务器仓库和远程服务器仓库代码Merge Toll工具处理
2.4.1 选择冲突文件,右键"team",选择“merge tool”,打开的视图中可以查看到修改的对比。
2.5 添加到暂存区(Add to Index), 将每个冲突文件修改为正确的,然后每个文件右键"team",选择“Add to Index”,可以看到该文件变成黑色的*号图标
2.6 提交(commit)到本地服务器仓库,千万不能提交到远程服务器仓库
2.7 删除(remove)不需要更新的文件,在同步窗口 (Synchronize),主要是调试的相关文档
2.8 推送(push)到远程服务器仓库
解决代码冲突流程
1、工程->Team->同步:
2、从远程pull至本地,就会出现如下内容:
3、使用Merge Tool,执行第二项,使用HEAD合并后的效果,再手动修改
4、修改后的文件需要添加到git index中去:
5、冲突文件变为修改图标样式,再提交至本地,此时的提交便是merge合并:
6、此时需要pull的向下箭头和数量没了,注意图标的变化:
7、现在可以直接push到远程了:
8 此时configure->save and push一步步执行冲突就搞定了。
案例1:PyCharm解决本地冲突的方法
1.修改代码后,进行commit提交到本地仓库
2.选择版本管理器的master的图标,选择远程仓库(Remote)
3.选择:Remote>origin>master>Merge 'origin/master' into master
4 然后再保存>Commit到本地仓库>Push到远程仓库
git忽略已加到仓库的文件或文件夹
1、全部版本地仓库和远程仓库都忽略,用如下两条命令都可以
git rm --cached 文件地址/文件名
git rm -r --cached 文件地址/文件名
2、仅本地忽略文件
git update-index --assume-unchanged 文件地址/文件名
指定忽略文件后git status 这个文件就不会再显示了。
如果以后需要提交了就取消忽略 加一个no
git update-index --no-assume-unchanged 文件地址/文件名
3、本地忽略整个文件夹下的文件
1)cd 先进入当前要忽略的文件夹
2)执行命令批量忽略
git update-index --assume-unchanged $(git ls-files | tr '\n' ' ')
3)git status 查看是否不再提示,恢复追踪文件改动 同样加 --no恢复
git update-index --no-assume-unchanged $(git ls-files | tr '\n' ' ')
.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。正确的做法是在每个clone下来的仓库中手动设置不要检查特定文件的更改情况。
这里假设要忽略已被纳入版本管理中的 /home/www/phpernote/config.php 文件,则执行命令:
1 | git update-index --assume-unchanged /home/www/phpernote/config.php |
然后在.gitignore文件里添加要忽略的文件或文件夹就行了。
注意:经实测以上方法只能临时将该文件加入忽略,如果执行了类似 git checkout -- . 的命令后,该文件的改动会恢复成之前在版本管理中的内容,因此彻底的处理方法如下:
例如我们现在要忽略已经加入到了版本控制库的目录 uploadfiles 或者文件 phpernote.jpg ,则操作如下:
1. 先清除缓存:
1 | $ git rm -r --cached uploadfiles |
2 | #如果是文件则: git rm --cached phpernote.jpg |
2. 然后将该目录或文件添加到 .gitignore 文件中去:
1 | $ echo '/uploadfiles' >> ./gitignore |
2 | #如果是文件则: echo '/phpernote.jpg' >> ./gitignore |
3. 然后提交更改:
1 | $ git add . |
2 | $ git commit -m '添加忽略文件' |
3 | $ git push |