git-git fetch / git merge合并时没有冲突,但是显示几乎所有文件都已修改并且需要提交

时间:2018-11-07 19:36:21

标签: git git-merge git-fetch

我是git的新手,而且我偶尔也会看到它。

例如:

  1. 我在分支机构branch-A工作了几天(分支是通过开发新副本创建的)
  2. git add . / git commit -m "blahblah"进行并提交我的更改
  3. 现在我想从远程获取最新更改并将其合并到我的分支中,以确保可以使用最新代码
  4. 要这样做,我执行git checkout develop切换到本地develop分支,git状态显示我落后37次提交

    myMBPro:MyProj$ git status
    On branch develop
    Your branch is behind 'origin/develop' by 37 commits, and can be fast-forwarded.
      (use "git pull" to update your local branch)
    
    Changes not staged for commit:
      (use "git add/rm <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    

    ,然后是删除的,未跟踪的文件列表

  5. git fetch origin,然后在git merge origin/develop分支上显示develop

myMBPro:MyProj user$ git fetch origin myMBPro:MyProj user$ git merge origin/develop Updating 799c6d7a..510c77ab Fast-forward .../Implementations/MyRenderer.cs | 39 ++-- ... etc

  1. 我现在通常会切换到我的分支branch-A并执行git merge develop以将开发合并到branch-A,但是我通常首先执行git status来检查一切是否正常。因此,我留在develop分支上,并做git status
  2. 问题是我看到git status可能会将项目中的每个文件都报告为已更改(有的未跟踪,有的已登台,有的已准备好提交)。

```

myMBPro:MyProj user$ git status
On branch develop
Your branch is up to date with 'origin/develop'.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

,然后是准备提交的文件,未暂存的文件和未跟踪的文件的列表。

因此,我最终得到了很多文件,这些文件甚至都没有被我触及,修改或添加,现在显示为我以某种方式进行了修改。结果,我不愿意将它们合并到我的branch-A中。

知道为什么会这样吗?甚至正常吗(但对我来说,未更改的文件在我更改文件时听起来并不正常,现在我需要开始跟踪它们,暂存并提交它们。

我在MacBookPro上,使用终端中的git并使用SourceTree

1 个答案:

答案 0 :(得分:1)

确定要在git commit之前进行git checkout develop吗?如果您的工作目录在checkout developpull之前是脏的,那么我知道这是唯一的可能。

当然,可能存在行尾问题,但这仍然不能真正解释问题。 git merge的一个重要方面是必须提交。保证在没有冲突的情况下提交,并且它不会提交的唯一方法是在有合并冲突的情况下(这会使您处于各种已暂存和未暂存的文件的状态)。如果您没有合并冲突(意思是看到fast-forward),那么似乎只有一种可能性:

假设您正在分支A上工作。然后提交。然后,您更改了几个文件(或者,同时运行的某些软件会自动更改它们)。然后,当您git checkout develop时,您最终将复制indexindex是您自最近一次提交以来所做的所有更改的集合。您可以签出另一个分支,索引将跟随您。据我所知,这似乎是唯一可能导致您遇到的问题的东西。如果合并影响文件属于索引的那一部分,则合并将失败。但是,如果一个简单的fast-forward错过了您的index,合并可能会成功,这将导致您的index显示在最近的提交之上。

为了将来,请尝试在git status之前运行git fetch origin; git merge origin/develop。如果仍然遇到麻烦,则可能必须复制粘贴终端中的内容,以便我们阅读。

此外,请确保仓库中仅包含源代码和构建脚本,并.gitignore vim,您的IDE,构建脚本,正在运行的可执行文件,等等。其中任何一个文件都可能会不断变化。