如何在Git中更新目录

8
我有一个Bitbucket仓库,其结构如下:
 Directory-A->
   directory a
   directory b
   file a
   file b
   file c

现在我想将文件“b”和文件“c”移动到“目录a”中。当我在本地机器上执行此操作并通过git add提交时,我会在目录a中得到文件b和文件c,但它们仍然存在于其外部。

当您移动文件时,需要添加新文件(新位置),但也要删除旧文件(旧位置)。 - Peque
我有成百上千个文件,不想一个一个地使用 rm 命令删除。 - Shruti Srivastava
1
git add --all 可能会有所帮助。 - Peque
但它不会从它们之前的位置中删除文件...有没有比手动删除每个文件更好的方法? - Shruti Srivastava
再次强调,git -A 等同于 git add -u + git add:Saurabh 所说的正是我的答案。这里发生了什么? - VonC
显示剩余6条评论
5个回答

4
当我在本地机器上执行并使用git add提交时,我在目录a中得到了文件b和文件c,但它们仍然存在于它的外面。这是因为您在directory a中执行了git add .,而不是在Directory-A中执行了git add -A .。
首先,当您在根目录下执行git add -A .(它是git add -u + git add .)时,您需要在Directory-A(根目录)中。
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 ."。

4

这里有一个更好的替代方案。请尝试以下方法:

git mv "file b" "file c" "directory a"

接下来是:

git commit -am "hey I moved filed"

注意:我仅仅是为了演示而使用了-am标志。这并不是一个好习惯。你应该只提交相关变更的文件,这样可以使你的代码库易于维护。


0

我通常是这样做的,我相信这甚至更容易,并且适用于整个项目:

  1. 将文件 bc 物理移动到目录 a 中(使用文件资源管理器或命令行)。

  2. 在您的项目中运行此 Git 命令:

    git add -u

    (它将自动从 Git 索引中删除所有已删除的文件:由于您将文件物理移动了,Git 将认为它们从旧位置“删除”并在新位置创建)

  3. 现在将所有更改/创建的文件添加到新提交中:

    git add .

  4. 像往常一样提交更改:

    git commit -m "将文件 b 和 c 移动到目录 a 中"


以下是关于git add -u命令的更多信息(-u--update的简写):

... 删除并修改索引条目以匹配工作树,但不添加新文件...更新整个工作树中的所有跟踪文件...

来源: http://www.git-scm.com/docs/git-add (查找--update部分)


0

快速修复。运行:

git add -A :/
git status

然后确保只有你想要添加/删除/修改的文件已经被暂存。这非常重要。如果你不小心暂存了多余的更改,请运行git reset。如果你确定要继续,请运行git commit

没有-Agit add只会暂存文件的添加和修改。它不会删除整个文件,并且移动操作将变成复制操作。git add -A会删除不存在的文件。

:/是一个快捷方式,表示仓库的根目录,而不是当前目录。如果你的当前目录是仓库的根目录,你可以省略这个符号。

请注意,运行git add -A——特别是在仓库的根目录下——通常被认为是危险的。不要养成盲目提交每个更改的习惯:只暂存你知道想要更改的内容。然而,当你需要移动大量文件时,这是一个非常方便的工具。


0

这应该可以工作。

git mv "文件a" "目录a"/

git mv "文件b" "目录a"/

git commit -m "文件a和b已移动到目录a"

编码愉快。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接