http://blog.csdn.net/sidely/article/details/40143441php
原文: http://www.tech126.com/git-fetch-pull/ html
git fetch origin master
git log -p master..origin/master
git merge origin/masternginx
git fetch origin master:tmp (把远程的master copy到本地的tmp)
git diff tmp (这里是比较当前分支和tmp分支,会显示全部不一样之处,有时只想显示文件列表,git diff branch1 branch2 --statgit
加上 --stat 是显示文件列表, 不然是文件内容diff安全
git diff tmp 文件路径 ,具体比较某个文件ruby
)
git merge tmp (把本地的和tmp分支合并)服务器
git checkout source_branch <paths>...
注意:在使用git checkout某文件到当前分支时,会将当前分支的对应文件强行覆盖。ssh
若是不肯定新文件是否能彻底覆盖master中的旧文件,能够新建一个master分支mastertmp,将变化的文件checkout到mastertmp,而后让master与mastertmp进行合并。ide
有个问题:工具
root@i :/opt/nginx/html/ git fetch origin master:tmp
remote: Counting objects: 12, done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 12 (delta 5), reused 0 (delta 0)
Unpacking objects: 100% (12/12), done.
From ssh://bitbucket.org/
05eb1e3..c2cd20f master -> tmp
05eb1e3..c2cd20f master -> origin/master
为何fetch到tmp分支上会跟新到master分支。
git pull origin master
上述命令其实至关于git fetch 和 git mergegit pull的做用是,从远程库中获取某个分支的更新,再与本地指定的分支进行自动merge。完整格式是:
好比,取回远程库中的develop分支,与本地的develop分支进行merge,要写成:
若是是要与本地当前分支merge,则冒号后面的<本地分支名>可以不写。
fetch
的关键, 是理解
FETCH_HEAD
.
这里须要解释下什么是FETCH_HEAD??
FETCH_HEAD指的是: 某个branch在服务器上的最新状态'.
执行过fetch操做的项目'都会存在一个FETCH_HEAD列表,
每个
这个列表保存在 .git/FETCH_HEAD
文件中, 其中每一行对应于远程服务器的一个分支
.
当前分支指向的FETCH_HEAD, 就是这个文件第一行对应的那个分支
.
通常来讲, 存在两种状况:
若是没有显式的指定远程分支
, 则远程分支的master
将做为默认的FETCH_HEAD.
若是指定了远程分支
, 就将这个远程分支做为FETCH_HEAD.
常见的git fetch 使用方式包含如下四种:
git fetch
这一步实际上是执行了两个关键操做:
- 建立并更新
全部远程分支的本地远程分支
.
- 设定当前分支的FETCH_HEAD
为远程服务器的master分支
(上面说的第一种状况)
须要注意的是: 和push不一样, fetch会自动获取远程`新加入'的分支.
git fetch origin
同上, 只不过手动指定了remote.
git fetch origin branch1
设定当前分支的 FETCH_HEAD' 为
远程服务器的branch1分支`.
注意: 在这种状况下, 不会在本地建立本地远程分支
, 这是由于:
这个操做是git pull origin branch1
的第一步, 而对应的pull操做,并不会在本地建立新的branch.
一个附加效果是:
这个命令能够用来测试远程主机的远程分支branch1是否存在, 若是存在, 返回0, 若是不存在, 返回128, 抛出一个异常.
git fetch origin branch1:branch2
只要明白了上面的含义, 这个就很简单了,
使用远程branch1分支在本地建立branch2(但不会切换到该分支),
若是本地不存在branch2分支, 则会自动建立一个新的branch2分支,
若是本地存在branch2分支, 而且是`fast forward', 则自动合并两个分支, 不然, 会阻止以上操做.
git fetch origin :branch2
等价于: git fetch origin master:branch2
用git pull来更新代码的时候,遇到了下面的问题:
error: Your local changes to the following files would be overwritten by merge: xxx/xxx/xxx.php Please, commit your changes or stash them before you can merge. Aborting
出现这个问题的缘由是其余人修改了xxx.php并提交到版本库中去了,而你本地也修改了xxx.php,这时候你进行git pull操做就好出现冲突了,解决方法,在上面的提示中也说的很明确了。
1)直接commit本地的修改
2)经过git stash
git stash git pull git stash pop
经过git stash将工做区恢复到上次提交的内容,同时备份本地所作的修改,以后就能够正常git pull了,git pull完成后,执行git stash pop将以前本地作的修改应用到当前工做区。
git stash: 备份当前的工做区的内容,从最近的一次提交中读取相关内容,让工做区保证和上次提交的内容一致。同时,将当前的工做区内容保存到Git栈中。
git stash pop: 从Git栈中读取最近一次保存的内容,恢复工做区的相关内容。因为可能存在多个Stash的内容,因此用栈来管理,pop会从最近的一个stash中读取内容并恢复。
git stash list: 显示Git栈内的全部备份,能够利用这个列表来决定从那个地方恢复。
git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。
二、放弃本地修改 的改法
git reset --hard git pull转自:http://www.letuknowit.com/post/144.html