git中的合并:通过git svn,表示已经更新,但git diff表示存在差异

git中的合并:通过git svn,表示已经更新,但git diff表示存在差异,svn,git,merge,git-svn,Svn,Git,Merge,Git Svn,我使用git svn处理代码库,需要将主干中的更改合并到分支中 我用git获取了两个分支,当我在分支中运行git diff trunk时,我可以看到所有的更改 然而,当我运行git merge heads/trunk时,我会收到一条消息“已经是最新的” 这显然不是最新的。我做错了什么?“已经是最新的”可能意味着: trunk是一个(trunk中的所有更改都已合并到master) 或者您正在处理(如果您直接签出SHA1提交引用或标记,则可能会发生这种情况) 注意:注意 Subversion中缺

我使用git svn处理代码库,需要将主干中的更改合并到分支中

我用git获取了两个分支,当我在分支中运行git diff trunk时,我可以看到所有的更改

然而,当我运行git merge heads/trunk时,我会收到一条消息“已经是最新的”

这显然不是最新的。我做错了什么?

“已经是最新的”可能意味着:

  • trunk是一个(trunk中的所有更改都已合并到master)
  • 或者您正在处理(如果您直接签出SHA1提交引用或标记,则可能会发生这种情况)
注意:注意

Subversion中缺少合并跟踪,因此使用Subversion进行分支开发可能会很麻烦。
虽然
git svn
可以跟踪采用标准布局的存储库的复制历史(包括分支和标记),但它还不能表示git内部发生的合并历史,并返回到svn用户的上游。
因此,建议用户在git中尽可能保持历史记录的线性,以便于与SVN兼容

为了简化操作并与功能较差的系统(SVN)进行互操作,建议所有
git SVN
用户
clone
fetch
dcommit
直接从SVN服务器进行,并避免git存储库和分支之间的所有
git克隆/拉/合并/推操作。
建议在git分支机构和用户之间交换代码的方法是
git格式补丁
git am
,或者只是“向SVN存储库提交数据”


一点也不像一个例子。以下是如何进入这种情况:

(从空目录开始):

>git初始化 >echo“hello”>a.txt >git添加-A >git提交-m“在主机上创建了一个” >git分支测试 >git校验测试 此时,主分支和测试分支上的a.txt是相同的

> echo "goodbye" > a.txt > git add -u > git commit -m "Changed a on test" >echo“再见”>a.txt >git添加-u >git提交-m“在测试时更改了” 现在(显然)会有不同之处:

> git diff --name-status master M a.txt >git diff--名称状态主机 M a.txt 但git没有什么可合并的:

> git merge master Already up-to-date. >git合并主机 已经是最新的了。 这是因为这里的更改是在测试时进行的,而不是在master上。如果切换到test,diff将以类似方式报告,但merge现在将合并从test到master的更改:

> git checkout master > git diff --name-status test M a.txt > git merge test Updating 088cd9d..3d8c8e2 Fast-forward a.txt | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) >git签出主机 >git diff——名称状态测试 M a.txt >git合并测试 更新088cd9d..3d8c8e2 快进 a、 txt | 2+- 1个文件已更改,1个插入(+),1个删除(-)
Git合并是定向的,从分支A合并到分支B与从分支B合并到分支A不同。

您是否检查过它在例如gitk中的外观?啊哈。。。因此,我使用了太多的git功能,而不是从svn中提取真正允许我使用的功能。很高兴知道,谢谢! > git checkout master > git diff --name-status test M a.txt > git merge test Updating 088cd9d..3d8c8e2 Fast-forward a.txt | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)