git项目中手动重命名文件的修复程序是什么?

git项目中手动重命名文件的修复程序是什么?,git,github,Git,Github,我有两个文件a.rb和b.rb。我在Sublime文本中将它们手动重命名为c.rb和d.rb,并对这些文件进行了一些更改,并使用以下命令将我的分支推送到远程存储库: git add git commit -m "message" git push origin branch-name 我应该做一个git mv,而不是手动重命名它 现在我需要一个合适的方法来解决这个问题,这样其他人就不会有合并冲突。 我能想到的唯一办法是: git checkout branch. git rm c.rb. gi

我有两个文件
a.rb
b.rb
。我在Sublime文本中将它们手动重命名为
c.rb
d.rb
,并对这些文件进行了一些更改,并使用以下命令将我的分支推送到远程存储库:

git add
git commit -m "message"
git push origin branch-name
我应该做一个
git mv
,而不是手动重命名它

现在我需要一个合适的方法来解决这个问题,这样其他人就不会有合并冲突。 我能想到的唯一办法是:

git checkout branch.
git rm c.rb.
git mv a.rb c.rb.
copy paste my old c.rb code to a.rb.

是否有更好的方法解决此问题?

您可以在提交之前对分支“Head”进行软重置。然后使用
git mv
命令重命名文件

如果不想执行上述操作,则可以删除文件“a.rb”和“b.rb”:


这将添加已删除的文件。提交更改并将其推送,这样如果项目中的合作者拉入更改,新文件将被拉入,以前的文件将被删除。

git mv不会做任何特殊的事情。它只是为您添加git和git rm。 事实上,它是一个移动的文件,而不是一个添加和删除文件,它不会被记录在任何地方,而是在您请求日志时推断出来的


您所需要做的就是确保为新名称添加了一个“git add”,我认为是这样做的,并在现有文件上添加了一个“git rm”

假设您以前推送了新文件
c.rb
d.rb
,您的工作区头部指向此提交,并且在您的工作区中删除了文件
a.rb
b.rb

[dmahar@dmahar rename3]$ git reset --hard HEAD
HEAD is now at d77decf Rename 'a.rb' to 'c.rb' and 'b.rb' to 'd.rb'.
[dmahar@dmahar rename3]$ ls
a.rb  b.rb  c.rb  d.rb
[dmahar@dmahar rename3]$ git rm c.rb d.rb
rm 'c.rb'
rm 'd.rb'
[dmahar@dmahar rename3]$ ls
a.rb  b.rb
[dmahar@dmahar rename3]$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    c.rb
#   deleted:    d.rb
#
[dmahar@dmahar rename3]$ git commit --message "Delete 'c.rb' and d.rb'."
[master 60f97ab] Delete 'c.rb' and d.rb'.
 0 files changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 c.rb
 delete mode 100644 d.rb
[dmahar@dmahar rename3]$ ls
a.rb  b.rb
[dmahar@dmahar rename3]$ git mv a.rb c.rb
[dmahar@dmahar rename3]$ git mv b.rb d.rb
[dmahar@dmahar rename3]$ git commit --message "Rename 'a.rb' to 'c.rb' and 'b.rb' to 'd.rb', again."
[master 8182195] Rename 'a.rb' to 'c.rb' and 'b.rb' to 'd.rb', again.
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename a.rb => c.rb (100%)
 rename b.rb => d.rb (100%)
[dmahar@dmahar rename3]$ ls
c.rb  d.rb
[dmahar@dmahar rename3]$ git log -M --summary
commit 8182195c1494541ab1dcaa97607ce4dc8b277d56
Author: Derek Mahar <derek.mahar@intelerad.com>
Date:   Thu May 30 15:21:12 2013 -0400

    Rename 'a.rb' to 'c.rb' and 'b.rb' to 'd.rb', again.

 rename a.rb => c.rb (100%)
 rename b.rb => d.rb (100%)

commit 60f97abb56e5b1e32d02dfb8ff14400910d4fef4
Author: Derek Mahar <derek.mahar@intelerad.com>
Date:   Thu May 30 15:20:11 2013 -0400

    Delete 'c.rb' and d.rb'.

 delete mode 100644 c.rb
 delete mode 100644 d.rb

commit d77decf9863fb1b4f8a2902becf687e6ececf4ce
Author: Derek Mahar <derek.mahar@intelerad.com>
Date:   Thu May 30 12:59:15 2013 -0400

    Rename 'a.rb' to 'c.rb' and 'b.rb' to 'd.rb'.

 create mode 100644 c.rb
 create mode 100644 d.rb

commit 219ce73f40d46690d77751fccd86b7c5a60b0d7d
Author: Derek Mahar <derek.mahar@intelerad.com>
Date:   Thu May 30 12:58:24 2013 -0400

    Add 'a.rb' and 'b.rb'.

 create mode 100644 a.rb
 create mode 100644 b.rb
[dmahar@dmahar重命名3]$git重置--硬头
HEAD现在位于d77decf,将“a.rb”重命名为“c.rb”,将“b.rb”重命名为“d.rb”。
[dmahar@dmahar重命名3]$ls
a、 rb b.rb c.rb d.rb
[dmahar@dmahar重命名3]$git rm c.rb d.rb
rm'c.rb'
rm'd.rb'
[dmahar@dmahar重命名3]$ls
a、 rb b.rb
[dmahar@dmahar重命名3]$git状态
#论分行行长
#要提交的更改:
#(使用“git重置磁头…”取消分级)
#
#已删除:c.rb
#已删除:d.rb
#
[dmahar@dmahar重命名3]$git commit--消息“删除'c.rb'和d.rb'
[master 60f97ab]删除“c.rb”和“d.rb”。
0个文件已更改,0个插入(+),0个删除(-)
删除模式100644 c.rb
删除模式100644 d.rb
[dmahar@dmahar重命名3]$ls
a、 rb b.rb
[dmahar@dmahar重命名3]$git mv a.rb c.rb
[dmahar@dmahar重命名3]$git mv b.rb d.rb
[dmahar@dmahar重命名3]$git commit——消息“再次将'a.rb'重命名为'c.rb','b.rb'重命名为'd.rb'
[master 8182195]再次将“a.rb”重命名为“c.rb”,将“b.rb”重命名为“d.rb”。
2个文件已更改,0个插入(+),0个删除(-)
重命名a.rb=>c.rb(100%)
重命名b.rb=>d.rb(100%)
[dmahar@dmahar重命名3]$ls
c、 rb d.rb
[dmahar@dmahar重命名3]$git log-M--摘要
提交8182195C1494541AB1DCA97607CE4DC8B277D56
作者:德里克·马哈尔
日期:2013年5月30日星期四15:21:12-0400
再次将“a.rb”重命名为“c.rb”,将“b.rb”重命名为“d.rb”。
重命名a.rb=>c.rb(100%)
重命名b.rb=>d.rb(100%)
提交60f97abb56e5b1e32d02dfb8ff14400910d4fef4
作者:德里克·马哈尔
日期:2013年5月30日星期四15:20:11-0400
删除“c.rb”和“d.rb”。
删除模式100644 c.rb
删除模式100644 d.rb
提交D77DECF9863FB1B4F8A2902BECF687E6ECECFCF4CE
作者:德里克·马哈尔
日期:2013年5月30日星期四12:59:15-0400
将“a.rb”重命名为“c.rb”,将“b.rb”重命名为“d.rb”。
创建模式100644 c.rb
创建模式100644 d.rb
提交219ce73f40d46690d77751fccd86b7c5a60b0d7d
作者:德里克·马哈尔
日期:2013年5月30日星期四12:58:24-0400
添加“a.rb”和“b.rb”。
创建模式100644 a.rb
创建模式100644 b.rb

回滚到手动更改之前的点,git将a和b.rb修改为c和d.rb,然后粘贴更改以消除合并冲突的可能性。您可以对已删除的文件调用
git rm
,无需回滚这涉及Ruby是偶然的,因此我正在删除Ruby标记。除非您所做的更改非常大,Git应该能够将此检测为移动
git mv
不会有帮助,要修复损坏的历史记录,最好分别提交移动和编辑。这就是说,您已经发布了分支,您不应该再重写那里的内容,除非您绝对确定没有其他人抓到它。您是否运行了
git add
git add.
git add
本身不会添加任何文件
git add。
只会添加新文件
c.rb
d.rb
。这就是你所做的吗?git甚至根本不记录重命名/复制/移动。重命名/复制/移动基于文件的相似性。表示文件是重命名或副本所需的相似性级别是可配置的。在尝试查看代码块在大型重构过程中的移动情况时,调整此值有时会很有用。有关详细信息,请参阅diff命令上的--find renames和--find copies选项。啊,太好了。手动重命名之后,但在提交之前,我只是尝试了一个
git rm
,然后是一个
git add
git status
现在神奇地显示发生了重命名(纯粹是从文件状态和内容)。不用麻烦了。Git实际上并不跟踪重命名。请参阅@jcoder的答案。
[dmahar@dmahar rename3]$ git reset --hard HEAD
HEAD is now at d77decf Rename 'a.rb' to 'c.rb' and 'b.rb' to 'd.rb'.
[dmahar@dmahar rename3]$ ls
a.rb  b.rb  c.rb  d.rb
[dmahar@dmahar rename3]$ git rm c.rb d.rb
rm 'c.rb'
rm 'd.rb'
[dmahar@dmahar rename3]$ ls
a.rb  b.rb
[dmahar@dmahar rename3]$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    c.rb
#   deleted:    d.rb
#
[dmahar@dmahar rename3]$ git commit --message "Delete 'c.rb' and d.rb'."
[master 60f97ab] Delete 'c.rb' and d.rb'.
 0 files changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 c.rb
 delete mode 100644 d.rb
[dmahar@dmahar rename3]$ ls
a.rb  b.rb
[dmahar@dmahar rename3]$ git mv a.rb c.rb
[dmahar@dmahar rename3]$ git mv b.rb d.rb
[dmahar@dmahar rename3]$ git commit --message "Rename 'a.rb' to 'c.rb' and 'b.rb' to 'd.rb', again."
[master 8182195] Rename 'a.rb' to 'c.rb' and 'b.rb' to 'd.rb', again.
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename a.rb => c.rb (100%)
 rename b.rb => d.rb (100%)
[dmahar@dmahar rename3]$ ls
c.rb  d.rb
[dmahar@dmahar rename3]$ git log -M --summary
commit 8182195c1494541ab1dcaa97607ce4dc8b277d56
Author: Derek Mahar <derek.mahar@intelerad.com>
Date:   Thu May 30 15:21:12 2013 -0400

    Rename 'a.rb' to 'c.rb' and 'b.rb' to 'd.rb', again.

 rename a.rb => c.rb (100%)
 rename b.rb => d.rb (100%)

commit 60f97abb56e5b1e32d02dfb8ff14400910d4fef4
Author: Derek Mahar <derek.mahar@intelerad.com>
Date:   Thu May 30 15:20:11 2013 -0400

    Delete 'c.rb' and d.rb'.

 delete mode 100644 c.rb
 delete mode 100644 d.rb

commit d77decf9863fb1b4f8a2902becf687e6ececf4ce
Author: Derek Mahar <derek.mahar@intelerad.com>
Date:   Thu May 30 12:59:15 2013 -0400

    Rename 'a.rb' to 'c.rb' and 'b.rb' to 'd.rb'.

 create mode 100644 c.rb
 create mode 100644 d.rb

commit 219ce73f40d46690d77751fccd86b7c5a60b0d7d
Author: Derek Mahar <derek.mahar@intelerad.com>
Date:   Thu May 30 12:58:24 2013 -0400

    Add 'a.rb' and 'b.rb'.

 create mode 100644 a.rb
 create mode 100644 b.rb