http://blog.csdn.net/pipisorry/article/details/46958699
冲突处理
git push冲突处理
git push时出现冲突:! [rejected] master -> master (fetch first)
error: failed to push some refs to 'git@github.com:pipilove/GitTest.git'
hint: Updates were rejected because the remote contains work that you do not have locally. This is usually caused by another repository pushing to the same ref. You may want to first integrate the remote changes (e.g., 'git pull ...') before pushing again.
或者出错Updates were rejected because the tip of your current branch is behind hint: its remote counterpart.
在git push后出现错误可能是因为其他人提交了代码,而使你的本地代码库版本不是最新。这时你需要先git pull代码后,检查是否有文件冲突并手动解决一下。没有文件冲突的话需要重新走一遍代码提交流程add —> commit —> push。
git push冲突使用git pull解决后的冲突文件
如某人A git clone远程文件到本地,然后修改了file1.txt文件为: 1 pipi's computer
然后另一个人B同样clone项目后,修改了file1.txt文件为:1 jiajia's computer,并push到远程github仓库中。
这样你git push时就会报冲突,因为远程比你多commit了一次,提前了。这时你必须先git pull一下
From github.com:pipilove/GitTest
9d7c4a2..9d052ea master -> origin/master
Auto-merging file1.txt
CONFLICT (content): Merge conflict in file1.txt
Automatic merge failed; fix conflicts and then commit the result.
这样远程的file1.txt会和你本地的修改会合并,冲突文件冲突的地方会有如下提示
1 <<<<<<< HEAD
2 pipi's computer
3 =======
4 jiajia's computer
5 >>>>>>> 9d052eac234b0eafd79233cea62b6db06a2f6086
冲突标记<<<<<<< (7个<)与=======之间的内容是A的修改,=======与>>>>>>>之间的内容是B的修改。
Note: 自动合并并产生合并文件好像只有git 2.0以上才有,ubuntu14.04好像是git 1.9.1,要更新一下才好。
此时,还没有任何其它垃圾文件产生。你需要把代码合并好后(如删除掉B的修改内容,只留下之前自己的)重新走一遍代码提交流程就好了:git add .; git commit -m ''; git push。这样远程就是A修改的内容了pipi's computer了。
git push --force选项
如果远程主机的版本比本地版本更新,推送时Git会报错,要求先在本地做git pull合并差异,然后再推送到远程主机。
这时,如果你一定要推送,可以使用--force选项。
$ git push --force origin
上面命令使用--force选项,结果导致远程主机上更新的版本被覆盖。除非你很确定要这样做,否则应该尽量避免使用--force选项。
如上面的示例中git push出错,这时直接
$git push --force
To git@github.com: /GitTest.git
+ cddb790...56e21f3 master -> master (forced update)
这样远程github上直接变成了:pipi's computer。
git pull冲突解决
不是每次git pull都会产生冲突文件。git2.0以上的git pull规则好像是这样的:如果远程的文件比本地新(修改时间),则会与本地合并,生成<===标记的冲突文件,需要手动解决(pull后直接输入命令git mergetool);如果远程文件比本地旧,则本地文件并不会改变,仍和远程不一样,没有冲突文件。
在commit本地代码后,git pull远程代码产生冲突的解决:手动解决git冲突的可视化解决方案
对于git push冲突,要先git pull,从而产生的冲突文件(合并后的),我们可以直接用vi或者其它文本编辑器打开再手动删除冲突,但是我们有更好的选择,如可以使用git mergetool可视化合并工具。
git pull后输入$git mergetool就会出现下面的可视化冲突解决工具meld。不过出现下面的可视化工具也可能是lz安装并配置了meld工具[Git高级教程:让git diff调用meld图形化差异比较工具]。
这个就好用多了,pycharm中也自带这个类似的工具。
在不commit本地代码的情况下,git pull远程代码,git pull文件时与本地文件冲突的解决:
问题:甲修改了文件A并且push到了git server上,这时乙也在修改文件A,他想看一下甲修改了什么,于是从git server上pull下来,但是会遇到这样的提示:
error: Your local changes to the following files would be overwritten by merge:
文件A Please, commit your changes or stash them before you can merge.
这里乙可以commit本地文件修改再pull
可是乙不想把他未完成的修改commit,这个时候就可以先把文件A暂存起来,不commit,再pull
Error pulling origin: error: Your local changes to the following files would be overwritten by merge
解决:
git stash #先将本地修改存储起来
git pull #暂存了本地修改之后,就可以pull了
git stash pop #还原暂存的内容
解决文件中冲突的的部分。
同git push冲突,冲突的文件中Updated upstream 和=====之间的内容就是pull下来的内容,====和stashed changes之间的内容就是本地修改的内容。碰到这种情况,git也不知道哪行内容是需要的,所以要自行确定需要的内容。
解决完成之后,就可以正常的提交了。
或者也可以使用git diff -w +文件名 来确认代码自动合并的情况。
[Git高级教程:git stash]
[git pull合并策略:MERGE STRATEGIES]
[pull 可能导致出现合并问题:修改合并策略]
[Git branch tip is behind it's remote counterpart and is preventing a 'push']
[Error pulling origin: error: The following untracked working tree files would be overwritten by...]
Git错误处理
git push 时报错 warning: push.default is unset
'matching'参数是 Git 1.x 的默认行为,其意是如果你执行 git push 但没有指定分支,它将 push 所有你本地的分支到远程仓库中对应匹配的分支。而 Git 2.x 默认的是 simple,意味着执行 git push 没有指定分支时,只有当前分支会被 push 到你使用 git pull 获取的代码。
根据提示,修改git push的行为:git config --global push.default matching。再次执行git push 得到解决。
git push比较大的文件的时候出现错误
error: RPC failed; result=22, HTTP code = 411
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly
Everything up-to-date
这样的话首先改一下git的传输字节限制
git config http.postBuffer 524288000
然后这时候在传输或许会出现另一个错误
error: RPC failed; result=22, HTTP code = 413
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly
Everything up-to-date
这两个错误看上去相似,一个是411,一个是413
下面这个错误添加一下密钥就可以了
首先key-keygen 生成密钥,然后把生成的密钥复制到git中自己的账号下的相应位置
git push ssh://192.168.64.250/eccp.git branch
错误"pathspec 'branch' did not match any file(s) known to git."
git checkout master
git pull
git checkout new_branch
git中输入ls命令中文乱码问题
在 Git Bash 中输入 ls 命令,为了正常显示中文文件名,只需要在git安装目录下的文件etc\git-completion.bash中添加一行
alias ls='ls --show-control-chars --color=auto'
from:http://blog.csdn.net/pipisorry/article/details/46958699
ref: