我有一个带有2个分支的git存储库:master和test.
主分支和测试分支之间存在差异.
两个分支都承诺所有更改.
如果我做:
git checkout master
git diff test
出现一个充满变化的屏幕,显示出差异.我想合并测试分支中的更改,所以:
git merge test
但得到消息"已经是最新的"
但是,检查每个不同分支下的文件清楚地显示了差异.
这里有什么问题,如何解决?
Bom*_*mbe 129
消息"已经是最新的"意味着您尝试合并的分支的所有更改已合并到您当前所在的分支.更具体地说,它意味着您尝试合并的分支是您当前分支的父分支.恭喜,这是你做过的最简单的合并.:)
用于gitk
查看您的存储库."test"分支的标签应位于"master"分支标签下方的某处.
您的分支机构与其父母的最新信息是最新的.根据合并,自上次合并以来,父母没有新的变化.这并不意味着分支是相同的,因为你的工作分支可以有很多变化,听起来就像你一样.
ACa*_*ter 121
当我知道远程主服务器上有更改时,这经常发生在我身上,因此我尝试使用它们进行合并git merge master
.但是,这不会与远程主服务器合并,而是与您的本地主服务器合并.
所以在进行合并之前,请先检查主人,然后再进行git pull
.然后,您将能够将新更改合并到您的分支中.
Mar*_*ley 42
假设您有一个master
具有以下提交历史记录的分支:
A -- B -- C -- D
Run Code Online (Sandbox Code Playgroud)
现在,您创建一个分支测试,对其进行处理,并执行4次提交:
E -- F -- G -- H
/
A -- B -- C -- D
Run Code Online (Sandbox Code Playgroud)
master
他的头指向D,而test
头部指向H.
当您要合并的分支的HEAD是您要合并的分支的提交链的父级时,将显示"已经是最新的"消息.情况就是这样:D
是...的父母E
.
没有什么可以从合并test
到master
,因为一切都没有改变对master
自那时起.你想要做的就是告诉Git master
要指向H,所以master的分支有以下提交历史:
A -- B -- C -- D -- E -- F -- G -- H
Run Code Online (Sandbox Code Playgroud)
这是Git命令的工作reset
.您还希望工作目录能够反映此更改,因此您将进行硬重置:
git reset --hard H
Run Code Online (Sandbox Code Playgroud)
Ste*_*lie 11
对我有用的是,假设您有branch1,并且想要将其合并到branch2。
您打开git命令行转到branch2的根文件夹,然后键入:
git checkout branch1
git pull branch1
git checkout branch2
git merge branch1
git push
Run Code Online (Sandbox Code Playgroud)
如果您有冲突,则无需执行git push,但首先要解决冲突,然后再进行推送。
Jus*_*tas 11
git merge origin/master
而是git merge master
为我工作。因此,要将 master 合并到 feature 分支中,您可以使用:
git checkout feature_branch
git merge origin/master
Run Code Online (Sandbox Code Playgroud)
合并始终在当前HEAD和一个或多个提交(通常是分支头或标记)之间,
并且索引文件在开始时必须与HEAD提交树(即最后一次提交的内容)匹配.
换句话说,git diff --cached HEAD
必须报告没有变化.合并的提交已包含在
HEAD
.这是最简单的案例,称为"已经是最新的".
这应该意味着测试中的提交已经在master中合并,但由于其他提交是在master上完成的,git diff test
因此仍然会给出一些差异.
发生在我身上并被发送到此页面,不确定我是否有相同的情况,但我的是我试图“重新合并”该“测试”分支。
所以我之前合并了它,但在合并期间我故意排除了一些特定的更改,因此分支之间显然存在一些差异。然后我试图重新合并它,因为我意识到/忘记了我应该有并想要添加我之前排除的特定更改/文件,我希望如果我再次进行合并会显示我之前排除的所有更改,但我错了,我收到了“已经是最新的”消息。
在阅读@Bombe的评论/答案后,他是对的,我认为 git 的行为就是这样,所以我所做的是对测试分支上的文件进行硬备份,然后签出主分支并手动将文件粘贴到其中并提交就好像这是新的变化一样。
我不确定这是否是正确的方法或者可以帮助其他人遇到同样的问题,但它确实为我的特殊情况提供了解决方案。
小智 5
这发生在我身上,因为奇怪的是GIT认为本地分支不同于远程分支。这在分支图中可见:显示了两个不同的分支:remotes / origin / branch_name和branch_name。
解决方案只是删除本地存储库,然后从远程重新克隆它。这样,GIT可以理解remotes / origin / branch_name>和branch_name确实相同,我可以发出git merge branch_name
。
rm <my_repo>
git clone <my_repo>
cd <my_repo>
git checkout <branch_name>
git pull
git checkout master
git merge <branch_name>
Run Code Online (Sandbox Code Playgroud)
发生这种情况是因为您要合并的分支的本地副本已过期。我有我的分支机构,MyBranch
我想将其合并到中ProjectMaster
。
_>git status
On branch MyBranch-Issue2
Your branch is up-to-date with 'origin/MyBranch-Issue2'.
nothing to commit, working tree clean
_>git merge ProjectMaster
Already up-to-date.
Run Code Online (Sandbox Code Playgroud)
但是我知道有些变化需要合并!
事情就是这样,当我输入时git merge ProjectMaster
,git会查看该分支的本地副本,它可能不是最新的。要查看是否是这种情况,我首先告诉Git检查分支是否过时,并使用uh来获取任何更改(如果有的话)fetch
。然后我跳到我想合并的分支中,看看那里发生了什么...
_>git fetch origin
_>git checkout ProjectMaster
Switched to branch ProjectMaster
**Your branch is behind 'origin/ProjectMaster' by 85 commits, and can be fast-forwarded.**
(use "git pull" to update your local branch)
Run Code Online (Sandbox Code Playgroud)
啊哈!我的本地副本已过85次提交,已经过时了,这可以解释所有内容!现在,我Pull
查看丢失的更改,然后跳至MyBranch
并再次尝试合并。
_>git pull
Updating 669f825..5b49912
Fast-forward
_>git checkout MyBranch-Issue2
Switched to branch MyBranch-Issue2
Your branch is up-to-date with 'origin/MyBranch-Issue2'.
_>git merge ProjectMaster
Auto-merging Runbooks/File1.ps1
CONFLICT (content): Merge conflict in Runbooks/Runbooks/File1.ps1
Automatic merge failed; fix conflicts and then commit the result.
Run Code Online (Sandbox Code Playgroud)
现在我还有另一个问题要解决...
归档时间: |
|
查看次数: |
167815 次 |
最近记录: |