相关疑难解决方法(0)

是否可以在Git中移动/重命名文件并保留其历史记录?

我想在Git中重命名/移动项目子树

/project/xyz
Run Code Online (Sandbox Code Playgroud)

/components/xyz
Run Code Online (Sandbox Code Playgroud)

如果我使用普通的git mv project components,那么所有的提交历史xyz project都会丢失.有没有办法移动这个以保持历史?

git rename mv

630
推荐指数
11
解决办法
32万
查看次数

使用Git diff检测代码移动+如何使用diff选项

考虑一个文件(1.c)包含作者M和J所做的三个函数和更改.如果有人运行git blame 1.c,他将获得以下输出:

^869c699 (M 2012-09-25 14:05:31 -0600  1) 
de24af82 (J 2012-09-25 14:23:52 -0600  2) 
de24af82 (J 2012-09-25 14:23:52 -0600  3) 
de24af82 (J 2012-09-25 14:23:52 -0600  4) public int add(int x, int y)  {
de24af82 (J 2012-09-25 14:23:52 -0600  5)    int z = x+y;
de24af82 (J 2012-09-25 14:23:52 -0600  6)    return z;
de24af82 (J 2012-09-25 14:23:52 -0600  7) }  
de24af82 (J 2012-09-25 14:23:52 -0600  8) 
^869c699 (M 2012-09-25 14:05:31 -0600  9) public int multiplication(int y, int z){
^869c699 …
Run Code Online (Sandbox Code Playgroud)

git git-diff

24
推荐指数
2
解决办法
6532
查看次数

在解决方案资源管理器中重命名、移动文件时,如何在 Visual Studio 中执行 git move,而不是 git delete 和 git add?

语境

我经常在 Visual Studio 2022 中移动、重命名文件。重命名是标准的重构实践。但是,当我在解决方案资源管理器中重命名文件时,不会git mv执行任何操作,而是执行 git delete 和 git add 。

这会导致丢失该特定文件/类的历史记录,这在许多情况下都是巨大的损失。

问题

我可以离开 IDE 并使用命令行来执行移动操作

git mv myoldfile.cs mynewfile.cs
Run Code Online (Sandbox Code Playgroud)

这将完美地保留历史记录,但离开 IDE 会成为生产力杀手,尤其是在谈论重构和重命名多个类/文件时。

在解决方案资源管理器中重命名、移动文件时,如何git mv在 Visual Studio 中执行,而不是 git delete 和 git add?

git visual-studio

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

Git重命名文件.历史记录在cmd-line上可用,但在github界面中没有?

在Git中重命名文件和文件夹时,有很多 关于如何保存历史记录的优秀 帖子.


这适用于git命令行界面:

#if you don't modify oldname.cpp or newname.cpp, git will understand your rename

git mv old.cpp new.cpp
git commit -am "renamed old.cpp -> new.cpp"

git log new.cpp #only shows the new commit
git log --follow new.cpp #shows ALL the history of old.cpp and new.cpp
Run Code Online (Sandbox Code Playgroud)

太棒了,所以这个--follow命令允许我们new.cpp在重命名之后获得所有的历史记录.这在git的命令行界面中效果很好.


但是,在github web界面中,历史old.cpp并未显示出来new.cpp.这是一个问题,因为我的许多团队成员都将他们的github帐户视为简历的一部分.如果他们的提交在重命名文件后没有出现在github中,那么他们就会失去恢复点.在主要文件名/目录重构之后,贡献者最终可能没有在repo上进行单个可见提交.

git log --follow在重命名文件后,如何在github Web界面(例如)中显示完整的文件历史记录?

或者我不会重命名任何东西,除非我愿意让偶然的github用户永远不会看到旧的提交?

git version-control github

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

如何查找 git 上所有提交中的所有重命名?

我迷失在回购迷宫中,其中有一堆文件被读取,而旧版本由于进行了不太好的变基而被重命名。

无论如何,我想列出在某个时刻被重命名的所有文件,即列出所有提交中的所有重命名文件。

git

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

使 git format-patch 跟随重命名,如 git log --follow

我正在尝试将文件从一个本地git 存储库移动到另一个本地 git 存储库以用于不同的项目,同时保留原始存储库中的历史记录。到目前为止,我有这个,这是工作的罚款,如果该文件从来没有移动或在源回购改名为:

# Executed from a directory in the target repository
( cd $SOURCE_REPOSITORY_DIRECTORY && git format-patch -B -M --stdout --root $SOURCE_FILENAME) | git am --committer-date-is-author-date
Run Code Online (Sandbox Code Playgroud)

这恰好有效,因为两个存储库的目录结构相同。如果它们不同,我必须创建补丁文件并使用sed或修复目录名称。

无论如何,这一切都在膨胀,直到我遇到一个已重命名的文件。即使我指定了-B -M(并获得了与 相同的结果-B -M -C --find-copies-harder),我也没有从移动之前获得补丁,即使文件被干净地移动(相似指数 100%)。

这特别奇怪,因为git log --follow显示了所有提交并git log --follow -p提供了所有差异。除了它以相反的顺序提供它们,所以我不能将它们送入git am.

另请注意,会git log --follow -p filename推出以下“补丁”以显示重命名:

diff --git a/old_dir_name/dir1/dir2/filename b/new_dir_name/dir0/dir1/dir2/filename
similarity index 100%
rename from old_dir_name/dir1/dir2/filename …
Run Code Online (Sandbox Code Playgroud)

git

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

Git合并移动的文件

我分叉了一个repo并更改了文件A.现在上游repo中的文件A已移动到子目录.我正在尝试将上游仓库合并到我的前叉.

Git认为文件A在其原始位置被删除,并且在新的子目录中创建了一个新文件(这也可能是因为他们将文件向上游移动的方式).

我希望在新位置对此文件进行修改,尽可能减少影响,提交和提交的历史记录.任何人都可以帮我解决这个问题吗?

git github

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

如何显示已在该提交和HEAD之间重命名的特定提交的文件?

我知道要在某个提交时显示文件,我会使用git show <commit>:<file path>.但是如果文件在commit和HEAD之间重命名,这不起作用,那么有没有办法轻松地在文件上执行此操作而无需手动确定该提交的原始文件名是什么?

git

5
推荐指数
0
解决办法
41
查看次数

Git 错误地将文件标记为已删除而不是重写

我正在对一个项目进行几次重构。因此,有时我需要重命名文件扩展名,例如index.js -> index.ts,并更改该文件上的许多行。

由于 git 错误地将其标记index.js为已删除并index.ts标记为新文件,因此这可能会对代码审查和日志造成不良影响。

有没有办法明确地对 git 说“嘿,我重命名index.jsindex.ts”?

编辑

使用的方法git add / git rm / git mv不起作用,因为 git 仍然说我创建了一个新文件并删除了其他文件。

另外,我不应该使用两次提交(一次用于重命名,一次用于更新其内容),因为第一次提交将被破坏,因为文件的构建步骤与文件.js不同.ts

git

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

标签 统计

git ×9

github ×2

git-diff ×1

mv ×1

rename ×1

version-control ×1

visual-studio ×1