我有一个带有2个分支的git存储库:master和test.
主分支和测试分支之间存在差异.
两个分支都承诺所有更改.
如果我做:
git checkout master
git diff test
出现一个充满变化的屏幕,显示出差异.我想合并测试分支中的更改,所以:
git merge test
但得到消息"已经是最新的"
但是,检查每个不同分支下的文件清楚地显示了差异.
这里有什么问题,如何解决?
我刚看到一些奇怪的事情git pull,我不明白.
星期五,我在一家当地分公司工作.我们称之为mybranch.在离开办公室之前,我把它推到原点(这是我的GitHub库)git push origin mybranch.
昨天在家里,我把pullmybranch写到我的笔记本电脑上,做了一些编码,然后将我的更改推回到github(原点).
现在我再次上班,并试图将改变从昨天拉到我的工作机器上(周末我的工作地点的本地回购没有改变):
git pull origin mybranch
Run Code Online (Sandbox Code Playgroud)
这导致了快速合并,这很好.然后我做了一个git status,它说:
# On branch mybranch
# Your branch is ahead of 'origin/mybranch' by 6 commits.
#
nothing to commit (working directory clean)
Run Code Online (Sandbox Code Playgroud)
咦?如果我周末没有触摸它,只是从原点拉出来,它怎么能提前6次?所以我跑了一个git diff origin/mybranch,差异就是我刚刚从远程拉出来的6个变化.
我只能通过运行来"修复"这个git fetch origin:
From git@github.com:me/project
af8be00..88b0738 mybranch -> origin/mybranch
Run Code Online (Sandbox Code Playgroud)
显然,我的本地仓库缺少一些参考对象,但这怎么可能呢?我的意思是,一个pull已经进行了一次获取,除了那个分支之外我没有处理任何事情,所以a git fetch origin和git fetch origin mybranch应该有相同的结果吗?
我应该总是用git pull origin而不是git pull origin branchname …
我们正在使用这种使用git的模型:http: //nvie.com/posts/a-successful-git-branching-model/
我正在尝试学习在特定的合并上使用git fetch和git merge而不仅仅是拉动.对于我的问题,我所做的是对分支进行了更改并将这些更改推送到分支.我在github上看到了这些变化.然后我切换到master来获取这些更改.所以我
git checkout master
git fetch // terminal shows nothing
git fetch origin // terminal shows nothing
Run Code Online (Sandbox Code Playgroud)
我是否正确使用命令获取?我在控制台上看不到任何东西.但是当我使用像SourceTree这样的工具,并且我获取它时,它会更新它们的树,我可以看到这些变化.
假设我下一步工作,我看到做了不同的改变,我只是做了git merge <hash of the last commit or commit I want to merge in>吗?谢谢!
根据这篇文章,我试图让自己养成在更新我的工作副本时显式获取和合并的习惯。但是,今天我在发出命令时犯了一个错字:
$ git fetch origin
$ git merge origin asdf
Run Code Online (Sandbox Code Playgroud)
请注意,我在合并命令中使用了空格而不是正斜杠。因为它似乎已经达到了预期的效果,所以直到我已经推送它才注意到它在日志中添加了一个措辞奇怪的提交:
commit 65f0037bed926c338cb95e7437e7f7f407028d9f
Author: Me <my_email@example.com>
Date: Mon May 14 09:36:44 2012 -0700
Merge branch 'asdf', remote-tracking branch 'origin' into asdf
Run Code Online (Sandbox Code Playgroud)
现在我想知道这是否真的有任何负面影响。似乎它将参数视为两个单独的分支规范以合并到当前分支中,并且“origin”将隐式扩展为“origin/asdf”——这正是我真正想要的。那时,我不知道为什么它甚至会允许“将分支‘asdf’合并到 asdf”发生。
这只是一个令人尴尬的无操作吗?或者我是否在我的存储库历史记录中引入了一个潜在的有问题的构造?
编辑:输出 git cat-file commit 65f0037b
tree 74ed9ead4b82e4e56bd5656ee10375f8f0fcb60d
parent 3bc2a37031a4a391aa4da64c22e3f55148cd23e2
author Me <my_email@example.com> 1337013404 -0700
committer Me <my_email@example.com> 1337013404 -0700
Merge branch 'asdf', remote-tracking branch 'origin' into asdf
Run Code Online (Sandbox Code Playgroud)