我是团队中的新程序员。在我的第一天,我将这个重命名的文件放在一个舞台上,准备由git提交:
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: .gitignore
new file: reports/SQLS.rar
renamed: account/enter_rules.php -> enter_rules.old.php
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)
deleted: account/enter_rules.old.php
Untracked files:
(use "git add <file>..." to include in what will be committed)
account/enter_rules.php
前两行我没问题。我知道发生了什么事。但是对于最后一个重命名:,我不确定应该做些什么。该系统运作良好。
在工作目录中我有:
account/enter_rules.php
我找不到enter_rules.old.php文件。
似乎其他程序员已经从文件中创建了一个副本,命名为.old,实际上是一些测试和新代码,而不是上传更改而忘记提交。比他手动删除old.php
处理这种情况的最佳方法是什么?我想在开始处理它并进行自己的更改之前先把git状态清楚。
我找到了这篇文章,但我不确定我是否应该或可以在我的情况下做出承诺。 Handling file renames in git
在阅读了所有建议之后,这对我有很大帮助,这就是我所做的:
enter_rules.php
$git commit -m "committing name changes"
。此时git不知道.old已被删除。$git rm "account/enter_rules.old.php"
来解决问题:未提交的更改提交:。我们以同样的方式使用$git add .
来&#34;告诉&#34;要跟踪<file>
,我们应该使用$git rm <file>
来&#34;告诉&#34; git忘了这个<file>
。$git status
,我收到了绿色信息:已删除:account / enter_rules.old.php。所以我应该告诉索引,.old文件已删除。我输入了$git commit -m "committing delete changes"
所有的建议都帮助我解决了这个问题,所以我会尽量做到公平,并且会给那些不那么重要的支票。
答案 0 :(得分:1)
虽然git
表示enter_rules.old.php
已重命名,但它也表示已将其删除:
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)
deleted: account/enter_rules.old.php
这意味着该文件已经消失,并且为了git
将该删除应用于存储库,删除它的操作必须包含在您的提交中。由于跟踪了更改但未暂存,您可以使用简单的命令执行此操作(如下面第3部分所述)。
account/enter_rules.php
。git add account/enter_rules.php
中添加文件
git status
,则应将enter_rules.old.php
标记为删除,并且应暂定account/enter_rules.php
以提交。git commit --all
以提交所有暂存的更改。通过运行git commit --all
,这也将删除您的同事已执行但未自行提交的删除。
听起来你的同事使用git mv
来重命名文件,然后将其删除但没有进行删除。
答案 1 :(得分:1)
Git无法处理工作文件夹中的文件。相反,如果工作在一个叫做“索引”的东西上。这意味着您可以更改文件,将它们放入索引中(“很快,我想...”)并使索引永久保留git commit
。
这里的主要优点是您可以使用单个命令收集索引中的许多更改(例如,当您进行了多次更改并希望将它们放入单独的提交中时)。此过程称为“暂存”。例如,git add
适用于索引。
您的案件发生了什么:
account/enter_rules.php
的副本,并将其复制到你的工作文件夹中,也没有告诉Git。对于Git,现在的情况是它知道曾经有一个你想要提交的文件enter_rules.old.php
。你可以这样做,因为Git记得足以真正做到这一点。
与此同时,您的工作空间发生了很大变化。分阶段文件消失,出现了新副本。由于Git无法读懂你的想法,它并不试图找出这可能意味着什么。它只列出了事实。
现在要清理:
要让Git忘记重命名为enter_rules.old.php
,请使用git reset HEAD enter_rules.old.php
现在应该记住跟踪account/enter_rules.php
。如果您更改了此文件,则会将其显示为已更改。运行git status
以确保。
答案 2 :(得分:1)
我觉得这里发生了什么:
在初始状态下,有两个文件account/enter_rules.php
和account/enter_rules.old.php
。
你的同事一定做过这样的事情:
git rm account/enter_rules.old.php
git mv account/enter_rules.php account/enter_rule.old.php
然后编辑了一个新的account/enter_rules.php
并将其保持未分级状态。
如果您对这些更改感到满意
git add account/enter_rules.php
git commit
其他
rm account/enter_rules.php
git reset HEAD
取消他的更改。
对我来说有什么奇怪的声音,为什么你要使用未提交的更改来处理同事的存储库克隆?