问题标签 [git-mv]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
535 浏览

git - merging branches after moving files to a different directory

I have two branches that I try to merge. In the original branch I have some files that in the 2nd branch where moved to a different location. the problem is that when I try to merge from the original branch, it doesn't apply the changes to the new file location even tough it detected that I moved the files with git move.

I created the following scenario to better explain my problem:

I have branch a with files a/1.txt, a/2.txt. in branch b I did git mv to 1.txt and 2.txt from directory a to b.

next.. in branch a I modified a/1.txt, in branch b when I try merge branch a into it, it tries to create a/1.txt instead of applying the change on the new file's location (in directory b).

how do I resolve this issue ?

0 投票
1 回答
65 浏览

git - 将 git 存储库移动到同一路径中的子目录,同时保留其所有历史记录

我有一个超过 100 次提交的 git 存储库,我在以下路径中初始化了一段时间:

/Users/myusername/

但是,我所有的提交实际上都是针对路径中的文件:

/Users/myusername/excess/folders/not/requiring/version/control/project_root/

我应该在 中初始化存储库project_root/,因为我不需要对上层目录中的任何内容进行版本控制。

是否有任何简单的方法可以更改存储库的路径,以便存储库的顶层project_root/同时保留我的版本历史记录?是否有任何额外的步骤可以在我的远程存储库中反映这一点,或者我只是在进行更改后提交并推送?

0 投票
2 回答
413 浏览

git - mv 或 (git mv) 多个文件,保留扩展名

我有大约 10 个目录,每个目录的内容都与此模式匹配:

我想将这些文件重命名为:

是否有可用于重命名文件的 mv 或 git mv 命令?

就像是:

我不太确定。

0 投票
1 回答
244 浏览

git - 奇怪的“git mv”行为

上个月,我开始通过 fork 相应的 repo、创建功能分支然后提交拉取请求来为 GitHub 存储库做出贡献。在重复该过程几天后,我在使用预安装的 Linux 命令mv和 Git 命令重命名文件时遇到了一个奇怪的问题git mv

实际的问题是,这取决于您何时使用 移动/重命名文件git mv、何时git add以及何时编辑重命名的文件,您将获得:

或这个:

为了证明这一点,我写了一个测试

出于某种原因,这主要影响“新文件”,而不是存储库中已经存在的文件。例如,如果您克隆我的Spoon-Knife 存储库的分支,git clone https://github.com/christianheinrichs/Spoon-Knife.git然后应用链接测试脚本的工作流程,您将看到在大多数情况下,您将能够将 README.md 文件重命名为 README,例如,编辑它仍然算作重命名,而不是新文件/删除的拆分。

虽然我可以在克隆的 Spoon-Knife fork repo 上重现新文件/删除的行为,但我不确定我是如何做到的,当我说我试图弄清楚时相信我。

那么我不明白这里到底发生了什么?

见:https ://gist.github.com/christianheinrichs/e50bfdd5eec70a606fa6ce4a88c5951b#file-git_mv-test-sh-L65

0 投票
1 回答
896 浏览

git - 试图了解`git diff`和`git mv`重命名检测机制

这是我之前提出的另一个问题的后续。

在被编辑之前,最初创建的文件something被重命名为somethingelse,可以在这里观察到:

然后该文件somethingelse重命名回something第二次 vim 编辑之前:

基本上在代码的以下部分

如果此时我添加abc到代码中,我们将得到:

我认为这是在第 1 行增加了 4 个字节,这反过来又会是这样的:

然后,如果我们添加一个换行符并在第三行输入 abc (这也应该是 4 个字节,如果有错请纠正我):

突然,Git 会检测到重命名(包含编辑):

@torek在这里给出的一个很好的回答/评论在一定程度上解释了这一点,并考虑了git diff重命名检测阈值git status

由于我们在两种情况下都添加了 4 个字节,Git 的行为不应该相同,但是以不同的方式,或者换行符与此有关吗?

0 投票
1 回答
33510 浏览

git - git 复制文件,而不是 `git mv`

我意识到 git 通过区分文件的内容来工作。我有一些文件要复制。为了绝对防止 git 感到困惑,是否有一些 git 命令可用于将文件复制到不同的目录(不是 mv,而是 cp),并暂存文件?

0 投票
1 回答
33 浏览

git - 单独提交文件重命名以保持历史连接时是否有任何陷阱?

该站点上有很多关于git mv跨名称边界检索文件的行为以及如何检索历史记录的问题。我知道 Git 实际上并没有记录文件的移动/重命名,但我并不完全理解手动这样做的问题所在。

假设我想重命名一个文件,并且我关心保持它的历史。如果我的工作流程类似于

那么历史就会被打破。的输出git log --follow -- new_file.txt将只是最近的“重命名和更改”提交。

但是,如果我改为使用类似的工作流程

那么看来我已经避免了休息。现在,相同日志命令的输出为我提供了“更改”、“重命名”以及file.txt之前涉及的任何提交。

我意识到如果文件没有被大量编辑,那是多余的,因为在这种情况下,Git 会自行推断重命名。但就实际令人讨厌的问题而言,我能想到的最有可能的是某种合并冲突,而且我还没有找到比常规方式更糟糕的情况。

我的问题是:我错过了什么吗?像这样进行明确的“重命名”提交是否存在危险?

0 投票
0 回答
271 浏览

git-checkout - 在 git mv 之后,未跟踪的工作树文件上的 Git 签出失败

我的当地分支机构有问题。当我尝试这样做时,git checkout <branch>我收到此错误消息:

我认为原因是事实,在当前分支中,我已经重命名/移动了一些带有git mv. 此错误消息中列出的所有文件都列出了旧路径(即移动/重命名操作之前的路径)。有没有办法解决这个问题?我现在想移动到我的主分支,并将它与当前分支合并,所以之后应该没有问题,但现在我不知道如何成功切换分支(然后进行合并,如果可能还会出现一些问题)。


编辑:我能够使用 -f 选项结帐,但问题仍然存在,因为现在我不能合并,出于同样的原因(实际上,现在路径是相反的,即现在​​错误消息包含新路径,即在数据库分支中使用)并且我不知道强制 git 进行此合并的选项。

我不确定,但可能相同的解决方案适用于结帐和合并问题。


在@LutzBüch 评论之后,我试图准确地展示这个回购中发生的事情。我有分支masterdatabase。数据库分支仅在与数据库严格相关的部分上工作。这部分代码保留在名为 let's say 的目录中db。在某些时候,我不得不将此目录名称更改为DB,所以我做了一些git mv's. 让我们从上次合并开始,当一切仍然有效时。

最后一个命令失败,出现前面提到的错误消息。列表中的所有文件都有旧目录名的路径,即db. 使用后git checkout -f master,当我尝试进行合并时,我收到了以DB目录名作为路径的路径。

0 投票
1 回答
106 浏览

git - 在 git 上移动某些文件时,它们不会被视为“重命名”

我有一个包含 ~300 个文件和 ~30 个文件夹的文件夹。我确实剪切了文件夹(Ctrl+X)并粘贴(Ctrl+V)到预期的文件夹上。

然后我只做了一个git add -A

做完之后git status,我会说 95% 的文件被正确地认为是“重命名”,但有些主题是“删除”+“新文件”。

我找不到任何可以重新组合未重命名文件的逻辑。

这里有什么问题?你认为我可以如何解决它?

(我有 git 版本 2.18.0.windows.1)

0 投票
0 回答
318 浏览

git - 特定分支中的不同文件名

在我的 git 项目文件夹中,我需要创建一个不同版本的软件,这当然可以通过创建新分支来完成。关键是我需要在不失去版本控制的情况下重命名不同的文件;分支 1 旧名称的更改必须合并到分支 2 新名称中。我已经尝试过了,但它没有用。

有什么方法可以做到这一点吗?在此先感谢您的帮助。

MORE INFO
Let's say that the two projects are very similar, think about two different versions of the same one. Now that I start working on the second version, I'm thinking about the code maintaining and I realized that the best option for me is the possibility to control them version together. The point is that i need to rename most of the files in the folder, and change in there basically the name of classes and functions. So, in the new branch-2, I've renamed the files with git mv old-name new-name and I've made a couple of tests.

  1. Starting with the same contents in the two files, If I make a change in branch-1/ old-file and then I merge branch-1 in branch-2, the modification is visible as expected in new-file.

  2. 如果我在 branch-2/new-file 中做了一个小改动,提交它然后重复上面的测试,一切都正常了。完美的。

  3. 当在重命名的文件(在这种情况下为 branch-2/new-file)中进行重大更改时,就会出现问题。再次进行第一次测试而不是合并,git 不会像重命名文件那样识别新文件,它会显示此冲突消息并将旧文件添加到分支 2 中。
    CONFLICT (modify/delete): old-file deleted in HEAD and modified in branch-1. Version branch-1 of old-file left in tree.

有没有办法强制 git 在任何情况下识别重命名的文件?现在我知道,如果我对重命名文件中所做的更改进行更多提交,系统可以工作,但必须有更好的解决方案。谢谢。