3

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

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

4

3 回答 3

7

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

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

于 2013-05-30T16:09:33.293 回答
0

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

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

$ git ls-files --deleted | xargs, 

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

于 2013-05-30T15:47:35.807 回答
0

假设您之前推送了新文件c.rbd.rb,您的工作区 HEAD 指向此提交,并且文件a.rbb.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
于 2013-05-30T19:24:18.750 回答