Git将文件移动到文件夹中

17

我对git和版本控制还比较新,有一个关于移动文件的问题。我的GitHub上有一个主repo,里面有6个源文件。

我已经在这个项目上进行了很多工作,现在我的本地分支包含两个文件夹,其中有这些源文件。

以前的目录结构是这样的:

Master:

  • File 1
  • File 2
  • File 3
  • File 4
  • File 5
  • File 6

而我的本地分支现在看起来像这样:

New Folder 1:

  • New File 1
  • New File 2
  • New File 3

New Folder 2:

  • File 1
  • File 2
  • File 3
  • File 4
  • File 5
  • File 6

我如何将我的本地结构移动到主分支而不丢失旧文件的提交历史记录?


答案: 您需要使用Git命令行界面或者GUI工具将本地分支合并到主分支中。以下是一些简单的步骤:
1. 在本地分支中,将代码提交并推送到远程分支。
2. 切换到主分支并使用git merge命令将本地分支合并到主分支中。
3. 如果在合并过程中出现冲突,请按照提示进行解决。
这样,您的代码就会被移动到主分支中,并且您的旧文件的提交历史记录将被保留。请注意,在合并分支时可能会发生意外情况,为了避免不必要的麻烦,请确保备份您的代码库。
4个回答

15

只需提交即可。Git blame等通常能够自动检测到移动操作。


9
Git实际上并不跟踪文件的“移动”,它根据类似内容的需求来推断。因此,只要进行移动并根据需要添加/删除文件即可。(如果您避免更改内容以及在单个提交中移动它们,将使工具未来更易于使用。)
然后,要查看记录中考虑到的移动,请使用-M、-C或它们的变体到git log。其他工具也适用类似的标记,您应该阅读帮助以了解它们所做的详细信息。
如果您在文件上使用git mv,则它只会为您执行git rm和git add。

其他人解释得太复杂了,mv 命令可以满足你的所有需求。为了方便起见,先创建要移动到的文件夹。 - doozMen

5
其他海报是正确的,但如果您想确认git将把它们视为移动(而不是删除/创建的组合),请运行git status。您应该看到:
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   renamed:    oldfile.txt -> newFolder/newfile.txt

10
如果Git将移动操作视为删除和创建的组合,那么应该怎么做? - Gauthier
2
先将之前文件夹中的文件删除,然后将新文件夹中的文件添加到暂存区 - 大多数情况下 Git 会将其视为重命名。 - Serg

2
在Github中,如果您要移动的文件不是太多,一个有趣的替代方案是编辑该文件,并将其名称更改为:
folder_to_move_into/file_name

当你提交代码时,文件会被移动到文件夹中。如果文件夹不存在,它将会被创建。


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