问题标签 [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.
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 ?
git - 将 git 存储库移动到同一路径中的子目录,同时保留其所有历史记录
我有一个超过 100 次提交的 git 存储库,我在以下路径中初始化了一段时间:
/Users/myusername/
但是,我所有的提交实际上都是针对路径中的文件:
/Users/myusername/excess/folders/not/requiring/version/control/project_root/
我应该在 中初始化存储库project_root/
,因为我不需要对上层目录中的任何内容进行版本控制。
是否有任何简单的方法可以更改存储库的路径,以便存储库的顶层project_root/
同时保留我的版本历史记录?是否有任何额外的步骤可以在我的远程存储库中反映这一点,或者我只是在进行更改后提交并推送?
git - mv 或 (git mv) 多个文件,保留扩展名
我有大约 10 个目录,每个目录的内容都与此模式匹配:
我想将这些文件重命名为:
是否有可用于重命名文件的 mv 或 git mv 命令?
就像是:
我不太确定。
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
git - 试图了解`git diff`和`git mv`重命名检测机制
这是我之前提出的另一个问题的后续。
在被编辑之前,最初创建的文件something
被重命名为somethingelse
,可以在这里观察到:
然后该文件somethingelse
被重命名回something
第二次 vim 编辑之前:
基本上在代码的以下部分:
如果此时我添加abc
到代码中,我们将得到:
我认为这是在第 1 行增加了 4 个字节,这反过来又会是这样的:
然后,如果我们添加一个换行符并在第三行输入 abc (这也应该是 4 个字节,如果有错请纠正我):
突然,Git 会检测到重命名(包含编辑):
@torek在这里给出的一个很好的回答/评论在一定程度上解释了这一点,并考虑了git diff
重命名检测阈值git status
。
由于我们在两种情况下都添加了 4 个字节,Git 的行为不应该相同,但是以不同的方式,或者换行符与此有关吗?
git - git 复制文件,而不是 `git mv`
我意识到 git 通过区分文件的内容来工作。我有一些文件要复制。为了绝对防止 git 感到困惑,是否有一些 git 命令可用于将文件复制到不同的目录(不是 mv,而是 cp),并暂存文件?
git - 单独提交文件重命名以保持历史连接时是否有任何陷阱?
该站点上有很多关于git mv
跨名称边界检索文件的行为以及如何检索历史记录的问题。我知道 Git 实际上并没有记录文件的移动/重命名,但我并不完全理解手动这样做的问题所在。
假设我想重命名一个文件,并且我关心保持它的历史。如果我的工作流程类似于
那么历史就会被打破。的输出git log --follow -- new_file.txt
将只是最近的“重命名和更改”提交。
但是,如果我改为使用类似的工作流程
那么看来我已经避免了休息。现在,相同日志命令的输出为我提供了“更改”、“重命名”以及file.txt
之前涉及的任何提交。
我意识到如果文件没有被大量编辑,那是多余的,因为在这种情况下,Git 会自行推断重命名。但就实际令人讨厌的问题而言,我能想到的最有可能的是某种合并冲突,而且我还没有找到比常规方式更糟糕的情况。
我的问题是:我错过了什么吗?像这样进行明确的“重命名”提交是否存在危险?
git-checkout - 在 git mv 之后,未跟踪的工作树文件上的 Git 签出失败
我的当地分支机构有问题。当我尝试这样做时,git checkout <branch>
我收到此错误消息:
我认为原因是事实,在当前分支中,我已经重命名/移动了一些带有git mv
. 此错误消息中列出的所有文件都列出了旧路径(即移动/重命名操作之前的路径)。有没有办法解决这个问题?我现在想移动到我的主分支,并将它与当前分支合并,所以之后应该没有问题,但现在我不知道如何成功切换分支(然后进行合并,如果可能还会出现一些问题)。
编辑:我能够使用 -f 选项结帐,但问题仍然存在,因为现在我不能合并,出于同样的原因(实际上,现在路径是相反的,即现在错误消息包含新路径,即在数据库分支中使用)并且我不知道强制 git 进行此合并的选项。
我不确定,但可能相同的解决方案适用于结帐和合并问题。
在@LutzBüch 评论之后,我试图准确地展示这个回购中发生的事情。我有分支master和database。数据库分支仅在与数据库严格相关的部分上工作。这部分代码保留在名为 let's say 的目录中db
。在某些时候,我不得不将此目录名称更改为DB
,所以我做了一些git mv
's. 让我们从上次合并开始,当一切仍然有效时。
最后一个命令失败,出现前面提到的错误消息。列表中的所有文件都有旧目录名的路径,即db
. 使用后git checkout -f master
,当我尝试进行合并时,我收到了以DB
目录名作为路径的路径。
git - 在 git 上移动某些文件时,它们不会被视为“重命名”
我有一个包含 ~300 个文件和 ~30 个文件夹的文件夹。我确实剪切了文件夹(Ctrl+X)并粘贴(Ctrl+V)到预期的文件夹上。
然后我只做了一个git add -A
。
做完之后git status
,我会说 95% 的文件被正确地认为是“重命名”,但有些主题是“删除”+“新文件”。
我找不到任何可以重新组合未重命名文件的逻辑。
这里有什么问题?你认为我可以如何解决它?
(我有 git 版本 2.18.0.windows.1)
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.
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.
如果我在 branch-2/new-file 中做了一个小改动,提交它然后重复上面的测试,一切都正常了。完美的。
当在重命名的文件(在这种情况下为 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 在任何情况下识别重命名的文件?现在我知道,如果我对重命名文件中所做的更改进行更多提交,系统可以工作,但必须有更好的解决方案。谢谢。