我想许多人更习惯于SVN而不是与Git混淆,所以也许有人可以澄清。
我提交并将一些更改推向GIT存储库。我一段时间没有做任何事情。同时,其他人承诺并推动他们的变化。然后,我尝试进行他们的更改,而我无法做到这一点,因为git status
表明我必须提交一些不是我的更改。这是什么意思?当我进行这些更改时会发生什么?我应该使用什么样的提交信息?
显然,"提交"的git概念与我习惯的SVN概念有很大不同,您只需 update
即可获得其他人的更改,并仅提交自己的更改。
目前尚不清楚您将在哪里出错(您没有给我们足够的信息),但我应该在这里指出两件事:
-
您的git存储库和工作目录就是: yours 。任何更改都是更改 you 要求的。您可能根本没有意识到(尤其是如果您开始使用某些更晦涩的git功能)。
当然,SVN也是如此,但这使我成为...
-
虽然git和svn 都可以给您"整个存储库"。查看,SVN鼓励(或至少没有主动劝阻)一次"一个文件"操作模式。这在git(在某种程度上)是可能的,但这不是一个好主意,因为您将与Git的总体推力作斗争,这是"一次性的所有存储库"查看。
听起来好像是通过要求git检查较旧的提交而遇到了麻烦,但整个较旧的提交:
$ git checkout master@{1.week.ago}
这将为您提供整个存储库(进入您的工作目录),此时您可以根据需要检查单个文件。 1 ,但是如果您只想查看一个特定文件,例如foo.txt
,您可能会很想这样做:
$ git checkout master@{1.week.ago} foo.txt
我不会说"从不这样做"下一个承诺匹配1周前的方式。
特别是,git具有"索引"。(aka; quot"登台区域"; quot; quot of enver; quot; quot;:修改一些文件,将它们添加到索引/阶段,当您对上演安排满意时,您将git commit
运行到将该安排变成一个新的,完整的提交。
当您使用 git checkout
( git checkout [rev] path ...
)的特定文件(s)形式时,这会告诉git提取文件的旧版本,然后将它们写入索引以及在工作中-树。换句话说,您要git获取文件的旧版本,将其放入工作树中,和 git add
结果。
要摆脱这种情况,请使用 git reset --hard
(对此命令以及重新设置要非常小心,即擦除索引和工作树的更改),或git checkout
,是最新版本您通过签出旧版本来使您陷入困境的文件中,以将其放回原样。
1 更具体地说,这种形式的git checkout
使您拥有"独立的头部":它通过找到其提交ID来检查特定的提交。首先确保它不会覆盖任何现有的工作,然后设置您的索引和工作树以匹配所选的提交,并更新HEAD
以保存该提交ID。如果稍后您 git checkout master
,git可以告诉您您没有对特定的commit-id进行任何更改,并安全地将您放回分支机构上。如git status
所示。因此,这种形式的结帐时代/还原电流是"更安全的"因为您不必确保您不会失去任何工作;git将为您做。
我的猜测是您之前进行了合并,以前导致冲突,而您忘了以提交结论。
然后, git status
会告诉您您在树上的未承诺更改,其中包括您通过合并带来的更改。最近的git版本应该告诉你
$ git status
[...]
You have unmerged paths.
(fix conflicts and run "git commit")