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

时间:2013-05-30 15:25:44

标签: git github

我有两个文件a.rbb.rb。我在Sublime Text中手动将它们重命名为c.rbd.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.

有没有更好的方法来解决这个问题?

3 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:0)

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

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

$ git ls-files --deleted | xargs, 

这将添加已删除的文件。提交更改并将其推送,如果项目中的协作者提取更改,则会提取新文件并删除之前的文件。

答案 2 :(得分:0)

假设您之前推送了新文件c.rbd.rb,您的工作区HEAD指向此提交,并在您的工作区中删除文件a.rbb.rb:< / p>

[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