我有两个文件a.rb
和b.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.
有没有更好的方法来解决这个问题?
答案 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.rb
和d.rb
,您的工作区HEAD指向此提交,并在您的工作区中删除文件a.rb
和b.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