我似乎高估了我对git的了解。
一周前,我开始研究一个项目。我从服务器下载它并开始使用git进行常规工作流程。
几天后,一位客户通知我,他决定介绍一些"改进"进入他的代码。他不是程序员,但无论如何他想添加一些变化。因此,不能选择学习如何使用git。
起初我以为我只是从服务器下载他的代码(我没有将任何代码上传到他的服务器),从中创建一个新的分支并将其与我的代码合并。
那么,我做了什么: 我在master中创建了一个新的分支(我的代码在哪里) -
git branch client_branch
git checkout client_branch
然后我从项目的文件夹中删除了所有代码 并仅插入客户的代码。
我在client_branch中做了一个新的提交 -
git commit -m clients_changes
然后为了安全起见我做了:
git checkout master
git branch merging
git checkout merging
最后:
git merge client_branch
一切都好。我没有冲突。但我敢打赌,必定存在冲突。因为现在我没有使用代码版本,所有的更改都完全消失在某些文件中。
请帮忙,有可能以某种方式保存他和我的变化吗?
提前致谢。
答案 0 :(得分:0)
问题的关键是找到客户用于进行更改的修订版。 让我们说他使用了修订版X
git branch client_changes X
git checkout client_changes
# Apply client changes
git branch merging master
git checkout merging
git cherry-pick client_changes # Apply the changes by the client
# Verify the changes
这样您就可以将客户端的更改应用到您的版本中。但是,找到客户端使用的基本修订版本至关重要,或者至少尽可能接近,或者在使用客户端代码覆盖代码时撤消自己的更改。
答案 1 :(得分:0)
好的,问题解决了。
在使用git diff玩了很长时间之后,看看我们代码的不同版本是如何通过控制台来实现它的。
问题的核心可以表示如下:
文件A(我的):
The
first
line
文件B(客户端):
The
second
line
如果我做简单的“git merge”命令,独立于我所在的分支,我将得到第一个或第二个版本的文件。 但我需要警告每一个差异!因为我无法确定哪个版本更好。
情况变得更糟,因为我使用了代码格式化程序,它格式化代码使其看起来更好(实际上这是一件好事,但在这种情况下它起了个坏玩笑)。
所以我开始使用kdiff3实用程序:
它允许我手动查看每个文件之间的差异,并决定是否要合并。
我必须承认不应该建议进入这种情况。但事情发生了,我没有找到更好的解决方案。
希望它有所帮助。