合并时 Sourcetree 更改提交

Sourcetree changes commits when merging

我正在使用 SourceTree 来管理我的 git。我想要做的是将一个有更改的分支 (master-k) 合并到 master 中。在分支上的每次提交中一切看起来都很好,但是在合并期间,整个文件都在改变。

注意: master-k 分支来自 mac 上的另一个用户,可能用于合并 Pull 请求。我在 Windows 10 使用 Sourcetree。

这是带有提交的分支的屏幕截图。请注意,显示的差异具有单独的行:

这是合并过程中的屏幕截图(有冲突需要解决):

你可以在上面看到差异基本上是一切 in style.css.

我试过的一些东西:

过去,忽略空格对我来说是个问题 - 它使我对整个文件产生差异。一旦我找到这个复选框,一切都很好。我确定它现在已经关闭了,但是这个合并仍然给我带来了问题。

您似乎遇到了两个不同的问题

行尾和空格

确保您的自动空格设置为输入或自动(如果您使用 Windows)。取决于您是想保留 Unix 风格还是在工作目录中使用 Windows 风格。两者都将提交 Unix 风格的行结尾。

然后规范您的行尾,以免您将来头疼。这有很好的记录,所以我不会在这里讨论,但是 this is a good guide.

请注意,更改差异样式不会影响磁盘上的文件或 git 执行合并的方式,它只会改变差异工具显示更改的方式。我通常建议让空白可见,因为它会告诉你在哪里进行了不必要的更改,这些更改可能会导致以后发生冲突。

处理工件

您的 style.css 文件是从 sass 代码编译而来的,因此从技术上讲它是一个工件,而不是代码本身。

是否将其包含在您的存储库中很大程度上取决于您的工作流程和部署过程。在理想情况下,您会在部署过程中编译 CSS,而不是将工件存储在存储库中。由于我们生活在一个理想的世界中,我将简要介绍如何处理存储在存储库中的工件带来的怪异现象。

当你有这样的工件时,解决合并,即使成功,也至少会破坏文件中的地图数据。如果您也开始制作 CSS 的缩小版本,这只会变得复杂。幸运的是,处理这个问题的方法很简单,解决源代码中的任何冲突,然后重新编译工件并将它们添加到提交中。

操作顺序将运行像这样:

git checkout master-k
git merge master

这里解决代码冲突

npm run buildcssjob # or similar

测试一切

git add style.css
git commit
git checkout master
git merge [--no-ff] master-k

大功告成。

向 LightBender 大声喊出他们在上面的第一个答案。我今天遇到了另一个类似的问题,这让我找到了整个文件显示为差异的另一个原因。

同样的症状,不同的原因。

出现问题是因为我在 Windows 机器上使用 compass。在 Windows 上,默认情况下不启用 Unix 行尾。

我找到了为我解决问题的线程: https://github.com/Compass/compass/issues/949

解决方案是添加:

sass_options = {:unix_newlines => true}

到我的 config.rb 文件。然后使用

重新编译
compass compile

并且输出非常完美!只显示实际的行差异而不是整个文件。

希望这对某人有所帮助!