昨天在用Git的时候遇到了一个小的冲突,不过这让我更加了解了Git

问题描述

1
2
3
4
5
6
7
8
$ git push -u origin master
To git@github.com:******/Demo.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:******/Demo.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

上面是我在一次push时遇到的问题,主要是因为我在github的网页上添加了一个readme文件,然后我在本地上传时就会出现该问题,这是由于本地与远程的版本库不一致

解决方案

第一:强制修改

1
git push origin master -f

不过这会导致不好的效果,因为这样做了,那么你远程仓库修改就无效了
第二:先pull,在push

1
2
git full origin master
git fush origin master

这是一个比较好的解决方案,不过我们也不知道远程修改是否正确,冒然合并有些风险
第三:创建新分支

1
2
git branch [name]
git push origin [name]

Git技巧

上面的解决方案我都是从网上搜来的,不过我学到了很多东西.
先就是push格式

1
git push <远程主机名> <本地分支名>:<远程分支名>

可能会奇怪了,为什么上面所有的命令都没有远程分支名,这是因为本地分支和远程分支有一个追踪关系,知道了本地分支,自然就知道了远程分支,这是默认的做法,其实你也可以换其他远程分支名

1
git branch -vv

上面命令可以查看与当前分支有追踪关系的分支.
还有就是我们经常看到:

1
git push -u origin master

这里想说的是-u这个参数,通过查:

1
git push --help

我们知道它代表的是set-upstream,不过有点不好理解,upstream翻译成中文是上游的意思,我觉得更好的理解是依赖,这里就是把origin设置成默认主机,之后push就可以直接使用下面命令:

1
git push

git的知识点比较多,而且都靠实践学习,这里就说这么多,最后推荐两个博客

upstream and downstream

Git远程操作详解