我是git的新手,而且我偶尔也会看到它。
例如:
branch-A
工作了几天(分支是通过开发新副本创建的)git add . / git commit -m "blahblah"
进行并提交我的更改要这样做,我执行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)
,然后是删除的,未跟踪的文件列表
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
branch-A
并执行git merge develop
以将开发合并到branch-A
,但是我通常首先执行git status
来检查一切是否正常。因此,我留在develop
分支上,并做git status
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
答案 0 :(得分:1)
确定要在git commit
之前进行git checkout develop
吗?如果您的工作目录在checkout develop
和pull
之前是脏的,那么我知道这是唯一的可能。
当然,可能存在行尾问题,但这仍然不能真正解释问题。 git merge
的一个重要方面是必须提交。保证在没有冲突的情况下提交,并且它不会提交的唯一方法是在有合并冲突的情况下(这会使您处于各种已暂存和未暂存的文件的状态)。如果您没有合并冲突(意思是看到fast-forward
),那么似乎只有一种可能性:
假设您正在分支A上工作。然后提交。然后,您更改了几个文件(或者,同时运行的某些软件会自动更改它们)。然后,当您git checkout develop
时,您最终将复制index
。 index
是您自最近一次提交以来所做的所有更改的集合。您可以签出另一个分支,索引将跟随您。据我所知,这似乎是唯一可能导致您遇到的问题的东西。如果合并影响文件属于索引的那一部分,则合并将失败。但是,如果一个简单的fast-forward
错过了您的index
,合并可能会成功,这将导致您的index
显示在最近的提交之上。
为了将来,请尝试在git status
之前运行git fetch origin; git merge origin/develop
。如果仍然遇到麻烦,则可能必须复制粘贴终端中的内容,以便我们阅读。
此外,请确保仓库中仅包含源代码和构建脚本,并.gitignore
vim
,您的IDE,构建脚本,正在运行的可执行文件,等等。其中任何一个文件都可能会不断变化。