在学习了Git的几个障碍之后,我遇到了一个新的挑战:重命名目录(在本地,在工作目录中).
当我键入时git status
,它会将旧目录名中的所有文件(在新目录中存在与新目录中完全相同的文件名)列为已删除,新目录名称为"未跟踪".
有没有办法告诉Git"它实际上是同一个目录,只是一个不同的名字"?
这样所有文件都只会被git status
修改列出 ?
举例来说,这是git status
我重命名整个目录时收到的输出:
git status
# On branch master
# 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: old-dir-name/file1
# deleted: old-dir-name/file2
# deleted: old-dir-name/file3
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# new-dir-name/
no changes added to commit (use "git add" and/or "git commit -a")
~/sb/ws>
Run Code Online (Sandbox Code Playgroud)
Phi*_*ler 18
只是git add
新名称的目录.Git没有明确跟踪重命名,它只是稍后检测它们.git mv
可能会稍微提高效率(因为它可以直接更新索引),但效果完全相同.
Win*_*Win 14
这里的所有答案对于我所面临的特定场景的实际解决方案的方式非常有帮助.我正在以实际步骤的形式提供对我有用的东西,希望能帮助其他人遇到同样的挑战:
git mv <old-dir-name>
<new-dir-name>
git status
(验证所有标记为重命名的文件,而不是"已删除")git commit -a -m "git mv
<old-dir-name> <new-dir-name>"
(这是一个"假的"提交,为后续步骤中的真实重命名做准备)git branch
git_mv_20110708_1500_DO_NOT_USE
(带有时间戳的"假"分支,提醒我们只将其作为解决方法)/bin/rm -Rf <new-dir-name>
cp -Rp .../<new-dir-name> .
(使用重命名的名称复制实际文件夹)git status
(现在,大多数修改过的文件都会被正确标记为已
修改,而不是"已删除".已重命名的文件将被标记为已删除并添加,尽管内容相同! - 如果重命名跟踪,则重复执行这些文件的步骤1-7他们也需要)git add <untracked files>
git commit -a -m "finally renamed
this folder"
git branch FOLDER_RENAMED
:)PS gitk
喜欢这个,但Emacs
仍然与重命名混淆.:(
您需要使用git的mv:http : //www.kernel.org/pub/software/scm/git/docs/git-mv.html
git mv old_dir new_dir
Run Code Online (Sandbox Code Playgroud)
因此,您需要将新目录移回旧目录,然后使用mv重新移动它。
编辑:要回答我的回答:
我决定自己测试一下。我创建了两个文件,具有鲜明的文字,并用git mv
一个,并且mv file file2
,git add file2
,git add -u
另一方。提交消息表明两者都被跟踪为重命名。因此,正如其他人所说,我的建议仅是节省了一步。
归档时间: |
|
查看次数: |
10467 次 |
最近记录: |