【发布时间】:2019-04-18 23:20:39
【问题描述】:
我在我的功能分支中添加了一些更改,使用 push -u git 命令暂存、提交并将其推送到原点。
第二天,我更新了本地开发和功能分支,以使用标准 git fetch / git merge 程序从远程获取最新代码。
此时,我看到了一些有趣的事情:
我在我的功能分支上,git status 告诉我一切都很干净,这是正确的
我切换到开发分支,git status 显示一切正常,这是正确的
我切换回我的功能分支,git status 报告我在前一天已经推送到远程的所有更改,如下所示:
- 暂存(绿色) - 我的更改正在被删除(这将一些文件标记为准备好提交)。现有文件被标记为已修改,我的更改已从中删除。我添加的文件被标记为已删除,
- 未暂存(紫色) - 我在推送过程中修改的现有项目文件,
- UNTRACKED (RED) - 我添加到项目中的新文件,作为上述推送的一部分。
我不明白为什么会这样,但它不应该。
如果我发出git add .,git 中没有消息显示,我只是回到终端命令。
如果我现在发出git status,它现在表明我的功能分支是最新的“没有什么可以提交,工作树是干净的”。
在我的 Mac 上像上面描述的那样从功能到开发和开发到功能分支来回切换会一遍又一遍地重现相同的问题。在我的 Windows 机器上这样做根本不会重现这个问题。
所以,我的结论是我的 Mac 机器上的 git 环境有问题。
然后,我也尝试在我的 Mac 上获取我的项目的全新克隆(它现在包含我的功能分支,因为我使用 git push -u 命令推送了我的所有更改),然后尝试来回切换开发和我的功能分支之间的克隆,问题没有发生。这让事情变得更加混乱。
我的 Mac 机器上的 git 似乎没有正确更新某些内容。可能是什么?如何调查?
我们是在 Mac 和 Windows 上工作的跨平台团队。我的core.autocrlf 在我的Mac 上设置为input,在我的Windows 上设置为true。我不知道core.autocrlf 的其他团队成员设置。
【问题讨论】:
-
您能否详细说明您是如何切换到分支机构的?您是在命令行上执行
git checkout <branch>还是通过您的IDE 执行此操作?在后一种情况下,你知道它发出了什么命令吗? -
每次我要开始新工作时,我都会在我的开发中执行 git fetch / git merge 来更新它。然后我通过 git checkout -b feature-branch 从它开始新的分支。我在功能分支上工作,git add ., git commit -m "xx", git push -u origin feature-branch。 ...为了使本地分支与原点保持同步,我每天使用 git checkout develop、git fetch/merge(或 git pull)与原点同步来更新我的本地开发。然后 git checkout feature-branch, git merge develop 切换到我的 feature-branch 并更新它。这一切都是通过终端完成的......
-
... 但我在我的 Mac 上的帖子中仅在我的终端和 SourceTree 上观察到上述问题。我在 Windows 上的 git 命令行工具和 Windows 上的 SourceTree 都没有看到这一点。我只使用 SourceTree 来查看文件中的更改,我使用 git 所做的一切都来自终端/命令行
-
您的工作流程对我来说似乎是合理的,而这对我来说确实是一个错误或配置问题。也许看看你的 ~/.gitconfig 和
/.git/config 来寻找一些不寻常的配置,或者你的 Windows 和 Mac 配置之间的差异。但恐怕我帮不上忙,对不起。