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