标签: git-mv

在git中处理文件重命名

我读过,当在git中重命名文件时,你应该提交任何更改,执行重命名,然后暂存重命名的文件.Git将从内容中识别文件,而不是将其视为新的未跟踪文件,并保留更改历史记录.

然而,今晚这样做我最终还是回归git mv.

> $ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   index.html
#
Run Code Online (Sandbox Code Playgroud)

将Finder中的样式表重命名iphone.cssmobile.css

> $ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   index.html
#
# Changed but not updated:
#   (use "git add/rm <file>..." to update what will be …
Run Code Online (Sandbox Code Playgroud)

git git-mv

422
推荐指数
8
解决办法
35万
查看次数

git copy file,而不是`git mv`

我意识到git的工作原理是区分文件的内容.我有一些我想复制的文件.为了绝对防止git变得困惑,是否有一些git命令可用于将文件复制到不同的目录(不是mv,但是cp),并且还可以暂存文件?

git cp git-mv

14
推荐指数
1
解决办法
1万
查看次数

Git:递归移动子模块(嵌套子模块)

我有以下git结构

- git-repo a
-- subdirectory 2015
--- git-submodule b
-- git-submodule c
--- git-submodule d
Run Code Online (Sandbox Code Playgroud)

我想将git子模块c移动到文件夹2015.我知道"脏方法"这样做(涉及修改.git/config并更改.git/modules文件中的几个文件中的gitdir)

我最近读到git mv应该能够做到这一点,即运行

git mv c 2015/
Run Code Online (Sandbox Code Playgroud)

这适用于没有嵌套子模块的存储库(在我的例子中为d).但是,当我在我的目录上运行此命令时,我收到的错误就像

fatal: Not a git repository: d/../../.git/modules/c/modules/d
fatal: 'git status --porcelain' failed in submodule 2015/c
Run Code Online (Sandbox Code Playgroud)

(注意,执行上述移动后,git状态会出现此错误)

是否有人知道一个干净的方法来执行此移动(即,不涉及手动更改.git/modules文件中的路径)?

编辑:(6/10/2015)

我目前最好的解决方案是不涉及对任何git配置文件的修改(首先要确保对d的所有更改都已提交并推送到某处)

rm c/d -rf
git mv c 2015
cd 2015/c
git submodule update
Run Code Online (Sandbox Code Playgroud)

编辑:(8/10/2015)

一个更少侵入性的解决方法

git mv c 2015
rm 2015/c/d/.git
cd 2015/c
git submodule update
Run Code Online (Sandbox Code Playgroud)

编辑:(21/9/2018)

自从git版本2.19.这已得到修复,并且git mv表现如预期.

git git-submodules git-mv

13
推荐指数
1
解决办法
999
查看次数

使用git的'git rm'和'git mv'的实际用例?

我知道git提供'git rm'和'git mv'来删除/移动文件或目录.但是,我无法看到实际用例.

通常情况下,我只是mv或rm文件或命令行中的任何内容,在完成所有必要的操作后,我可以运行'git add -u'和'git add.',就像我问的那样答案在这里.

我错过了什么吗?有没有只有'git rm'和'git mv'的情况?

git git-rm git-mv

7
推荐指数
1
解决办法
999
查看次数

git mv 和变化以及相似度指数

当使用 重命名文件时git mv,提交将显示重命名自和重命名为,并且在拉取请求中显示相同的内容,这很好。但是当一个文件被git mv编辑然后更改时,看起来有一个特定的阈值,当更改的行数超过它时,它将不再显示为重命名,而是显示为删除了旧文件并添加了新文件。所以我的问题是这个阈值是一个明确定义的数字吗?有没有其他方法可以让它变得更好,主要是因为在pull request diff中,当两个文件不考虑重命名时,diff不会并排显示,这使得审查变得困难。

git git-mv github-codereviews

6
推荐指数
1
解决办法
1968
查看次数

git mv和MS-DOS移动有区别吗?

如果我使用git mv命令移动Git跟踪文件而不是仅使用MS-DOS move或Windows资源管理器移动文件,这会有所不同吗?

回到Subversion时代,有必要使用例如TortoiseSVN SVN Move versioned files here命令来保持历史不变.

我希望它在Git中以相同的方式工作,但是测试(参见下面的示例)显示Git自己检测到文件已被移动并且历史记录保持不变.

那么为什么要使用git mv呢?

C:\test>git init
C:\test>mkdir folder
C:\test>cd folder
C:\test\folder>echo "1" > file.txt
C:\test\folder>git add .
C:\test\folder>git commit -m "Initial commit"
C:\test\folder>echo "2" >> file.txt
C:\test\folder>git add .
C:\test\folder>git commit -m "Update file.txt"
C:\test\folder>move file.txt ..
C:\test\folder>cd ..

C:\test>git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." …
Run Code Online (Sandbox Code Playgroud)

git git-mv

5
推荐指数
2
解决办法
798
查看次数

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

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

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

git mv something somethingelse
Run Code Online (Sandbox Code Playgroud)

该文件somethingelse然后得到重命名回something第二VIM编辑之前:

git mv somethingelse something
Run Code Online (Sandbox Code Playgroud)

基本上在代码的以下部分中

git mv something somethingelse
Run Code Online (Sandbox Code Playgroud)

如果在这一点上我添加abc到代码中,我们将最终得到:

First line of code. abc
Run Code Online (Sandbox Code Playgroud)

我认为这是第1行增加了4个字节,而这又将在此结束:

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   something
        deleted:    somethingelse
Run Code Online (Sandbox Code Playgroud)

然后,如果我们添加换行符并在第三行中键入abc(也应为4个字节,如果有错,请更正我):

First line of code.

abc
Run Code Online (Sandbox Code Playgroud)

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

On branch master
Changes to be committed:
  (use "git reset HEAD …
Run Code Online (Sandbox Code Playgroud)

git github git-diff git-status git-mv

3
推荐指数
1
解决办法
440
查看次数

如何使用git将目录移动到另一个目录

我有一个目录“Checkout”需要移动到目录“screens”。我不想覆盖 screen 文件夹,我只想向其中添加 Checkout。这一切都在本地机器上。

到目前为止,我已经创建并导航到一个新分支。这个想法是移动此分支中的整个目录,添加/提交更改,然后将此分支与更改的目录位置推送到远程。

我已经尝试过这个命令...

git mv app/Checkout ... app/screens

但我得到

fatal: bad source, source=..., destination=app/screens/...

我缺少什么?

git git-mv

2
推荐指数
1
解决办法
4104
查看次数

无法提交文件,意外地用mv重命名

我不小心用mv重命名了一个git下的文件.我将文件从小写重命名为大写,保持名称相同.

mv abc.java ABC.java

之后我也做了更改并提交了文件.

我现在如何对该文件进行实际的git重命名?Git bash似乎不理解ABC.java和abc.java之间的区别.

我不确定master(由其他人)发生了什么变化,但在转移到分支后,我无法将更改提交给文件.它说旧的文件索引仍然存在.

$ git commit -m"重命名为大写"ABC.java致命:不会添加文件别名'dir1/ABC.java'('dir1/abc.java'已存在于索引中)

当我执行git状态时,它会显示重命名的文件但不允许我提交重命名的文件.如果我尝试删除abc.java(实际上至少在本地不存在),再次(我认为由于不区分大小写)git删除新的.

如果我克隆了一个新的repo,那么repo仍然会删除带有旧名称(abc.java)的文件,但是我的所有更改都会在其中出现最近失败的文件.

git github git-reset git-branch git-mv

1
推荐指数
1
解决办法
1797
查看次数