git 中的重命名文件
Renamed files inside git
我是一个团队的新程序员。在我的第一天,我将这个重命名的文件放在一个阶段中,准备由 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
前两行没问题。我知道发生了什么。但是对于最后一个 renamed:,我不确定应该做什么。系统运行良好。
在我的工作目录中:
account/enter_rules.php
我找不到 enter_rules.old.php 文件。
其他程序员似乎从该文件创建了一个副本,实际命名为 .old,进行了一些测试和新代码,然后暂存更改并忘记提交。比他手动删除了old.php
处理这种情况的最佳方法应该是什么?我想先清除 git 状态,然后再开始处理它并进行我自己的更改。
我找到了这个 post 但我不确定我是否应该或可以在我的情况下做出承诺。 Handling file renames in git
阅读所有建议后,对我帮助很大,这就是我所做的:
- 我刚刚从文件
enter_rules.php
中复制了一份(只是为了安全起见)
- I "told" to git (to the INDEX) 文件名已更改。
$git commit -m "committing name changes"
。此时 git 不知道 .old 已被删除。
- 然后我输入
$git rm "account/enter_rules.old.php"
来解决行:Changes not staged for commit: 。同理我们用$git add .
到"tell"git去追踪一个<file>
,我们应该用$git rm <file>
到"tell"git忘记这个 <file>
.
- 然后我输入
$git status
并收到绿色消息:已删除:account/enter_rules.old.php. 所以我应该告诉索引,.old 文件已被删除。我输入了 $git commit -m "committing delete changes"
- 现在git知道enter_rules.php改名为enter_rules.old.php然后enter_rules.old.php 被移除(删除)。
- 然后我解决了最后一行(未跟踪的文件:)。我刚刚告诉 git 创建了一个新文件,它调用 enter_rules.php。我按原样添加并承诺。
所有的建议都帮助我解决了这个问题,所以我会尽量公平,并会把支票给谁的点数少。
虽然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 部分中描述)。
- 使用
git add account/enter_rules.php
添加 account/enter_rules.php
中的文件。
- 如果您再次 运行
git status
,enter_rules.old.php
应该标记为删除,account/enter_rules.php
应该暂存以提交。
- 运行
git commit --all
提交所有暂存更改。
通过 运行宁 git commit --all
,这也将暂存您的同事执行但他/她自己未提交的删除。
听起来您的同事使用 git mv
重命名文件,然后将其删除,但没有进行删除操作。
Git 不适用于您的工作文件夹中的文件。相反,如果在名为 "index" 的东西上工作。这意味着您可以更改文件,将它们放入索引 ("soon, I'd like to ...") 并使用 git commit
.
使索引永久化
这里的主要优点是您可以使用单独的命令收集索引中的许多更改(例如,当您进行了多项更改并希望将它们放入单独的提交中时)。这个过程称为"staging"。例如,git add
适用于索引。
你的情况是:
- 您重命名了文件(可能在您的 IDE 中)并告诉 Git 到 "stage" 更改。 Git 在索引中记住这个。
- 你在不告知的情况下删除了文件Git
- 您从某处获得了
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
确认一下。
我似乎很清楚这里发生了什么:
初始状态下有两个文件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
撤消他的更改。
我觉得奇怪的是,你为什么要使用同事的未提交更改的存储库克隆?
我是一个团队的新程序员。在我的第一天,我将这个重命名的文件放在一个阶段中,准备由 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
前两行没问题。我知道发生了什么。但是对于最后一个 renamed:,我不确定应该做什么。系统运行良好。
在我的工作目录中:
account/enter_rules.php
我找不到 enter_rules.old.php 文件。
其他程序员似乎从该文件创建了一个副本,实际命名为 .old,进行了一些测试和新代码,然后暂存更改并忘记提交。比他手动删除了old.php
处理这种情况的最佳方法应该是什么?我想先清除 git 状态,然后再开始处理它并进行我自己的更改。
我找到了这个 post 但我不确定我是否应该或可以在我的情况下做出承诺。 Handling file renames in git
阅读所有建议后,对我帮助很大,这就是我所做的:
- 我刚刚从文件
enter_rules.php
中复制了一份(只是为了安全起见)
- I "told" to git (to the INDEX) 文件名已更改。
$git commit -m "committing name changes"
。此时 git 不知道 .old 已被删除。 - 然后我输入
$git rm "account/enter_rules.old.php"
来解决行:Changes not staged for commit: 。同理我们用$git add .
到"tell"git去追踪一个<file>
,我们应该用$git rm <file>
到"tell"git忘记这个<file>
. - 然后我输入
$git status
并收到绿色消息:已删除:account/enter_rules.old.php. 所以我应该告诉索引,.old 文件已被删除。我输入了$git commit -m "committing delete changes"
- 现在git知道enter_rules.php改名为enter_rules.old.php然后enter_rules.old.php 被移除(删除)。
- 然后我解决了最后一行(未跟踪的文件:)。我刚刚告诉 git 创建了一个新文件,它调用 enter_rules.php。我按原样添加并承诺。
所有的建议都帮助我解决了这个问题,所以我会尽量公平,并会把支票给谁的点数少。
虽然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 部分中描述)。
- 使用
git add account/enter_rules.php
添加account/enter_rules.php
中的文件。 - 如果您再次 运行
git status
,enter_rules.old.php
应该标记为删除,account/enter_rules.php
应该暂存以提交。 - 运行
git commit --all
提交所有暂存更改。
通过 运行宁 git commit --all
,这也将暂存您的同事执行但他/她自己未提交的删除。
听起来您的同事使用 git mv
重命名文件,然后将其删除,但没有进行删除操作。
Git 不适用于您的工作文件夹中的文件。相反,如果在名为 "index" 的东西上工作。这意味着您可以更改文件,将它们放入索引 ("soon, I'd like to ...") 并使用 git commit
.
这里的主要优点是您可以使用单独的命令收集索引中的许多更改(例如,当您进行了多项更改并希望将它们放入单独的提交中时)。这个过程称为"staging"。例如,git add
适用于索引。
你的情况是:
- 您重命名了文件(可能在您的 IDE 中)并告诉 Git 到 "stage" 更改。 Git 在索引中记住这个。
- 你在不告知的情况下删除了文件Git
- 您从某处获得了
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
确认一下。
我似乎很清楚这里发生了什么:
初始状态下有两个文件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
撤消他的更改。
我觉得奇怪的是,你为什么要使用同事的未提交更改的存储库克隆?