Directory-A->
directory a
directory b
file a
file b
file c
现在我想将文件“b”和文件“c”移动到“目录a”中。当我在本地机器上执行此操作并通过git add提交时,我会在目录a中得到文件b和文件c,但它们仍然存在于其外部。
Directory-A->
directory a
directory b
file a
file b
file c
Directory-A-> <====== there: git add -A .
directory a
file b
file c
directory b
file a
目录A
中执行'git add -A .
'命令将检测到目录A
中文件的删除和目录a
中文件的添加。更多信息请参见"Difference between “git add -A
” and “git add .
”"。这里有一个更好的替代方案。请尝试以下方法:
git mv "file b" "file c" "directory a"
接下来是:
git commit -am "hey I moved filed"
注意:我仅仅是为了演示而使用了-am
标志。这并不是一个好习惯。你应该只提交相关变更的文件,这样可以使你的代码库易于维护。
我通常是这样做的,我相信这甚至更容易,并且适用于整个项目:
将文件 b 和 c 物理移动到目录 a 中(使用文件资源管理器或命令行)。
在您的项目中运行此 Git 命令:
git add -u
(它将自动从 Git 索引中删除所有已删除的文件:由于您将文件物理移动了,Git 将认为它们从旧位置“删除”并在新位置创建)
现在将所有更改/创建的文件添加到新提交中:
git add .
像往常一样提交更改:
git commit -m "将文件 b 和 c 移动到目录 a 中"
以下是关于git add -u
命令的更多信息(-u
是--update
的简写):
... 删除并修改索引条目以匹配工作树,但不添加新文件...更新整个工作树中的所有跟踪文件...
来源: http://www.git-scm.com/docs/git-add (查找--update部分)
快速修复。运行:
git add -A :/
git status
然后确保只有你想要添加/删除/修改的文件已经被暂存。这非常重要。如果你不小心暂存了多余的更改,请运行git reset
。如果你确定要继续,请运行git commit
。
没有-A
,git add
只会暂存文件的添加和修改。它不会删除整个文件,并且移动操作将变成复制操作。git add -A
会删除不存在的文件。
:/
是一个快捷方式,表示仓库的根目录,而不是当前目录。如果你的当前目录是仓库的根目录,你可以省略这个符号。
请注意,运行git add -A
——特别是在仓库的根目录下——通常被认为是危险的。不要养成盲目提交每个更改的习惯:只暂存你知道想要更改的内容。然而,当你需要移动大量文件时,这是一个非常方便的工具。
这应该可以工作。
git mv "文件a" "目录a"/
git mv "文件b" "目录a"/
git commit -m "文件a和b已移动到目录a"
编码愉快。
添加
新文件(新位置),但也要删除
旧文件(旧位置)。 - Pequegit add --all
可能会有所帮助。 - Pequegit -A
等同于git add -u
+git add
:Saurabh 所说的正是我的答案。这里发生了什么? - VonC