【问题标题】:Move a java class file from one branch in git to another branch将 java 类文件从 git 中的一个分支移动到另一个分支
【发布时间】:2017-07-24 17:35:46
【问题描述】:

我有这个 java 类 flie.java,我将它与 branch A 中的其他 java 文件一起提交并推送。我只想将 file.java 从 branch A 移动到 branch B 而不移动在分支 A 中推送的其他文件。我试图从 eclipse 中做到这一点,但这是不可能的。我按照以下步骤从 git 尝试:moving a file in git 但没有将其移动到现有分支的选项。我知道我可以复制文件并将其粘贴到 Eclipse 中的分支 B,但这不是目的! 有没有我可以用来移动该文件的 git 命令?

【问题讨论】:

  • 为什么不想复制粘贴呢? git 不支持在分支之间移动文件。事实上你不能修改git中的历史记录。
  • @talex:您可以在 Git 中修改历史记录,而且相当容易(至少与 Subversion 等相比)。请参阅git commit --amendgit rebasegit reset --hardgit push --force 等命令。
  • @jwodder - 嗯,这取决于你如何看待它。您可以修改 ref 的感知历史 - 需要付出代价
  • 我忘记了 git push --force,但无论如何它在大多数服务器上都被禁用了。其他命令仅更改本地 repo。

标签: git git-branch


【解决方案1】:
git checkout commitOrBranch -- path/to/file

那么 git checkout branchB -- path/file.java 只需签出带有文件的分支然后移动? – 马可

文件将被添加到当前分支。当两个分支合并时,Git 不会引发冲突

但是如果在合并之前删除原分支中的文件,可能会引发冲突


如果任何一方进一步修改文件(不仅仅是原始分支删除它),几乎肯定会引发冲突。 ——马克·阿德斯伯格

仅当文件在两个 分支上发生更改时(合并前)才会引发冲突。这正是通过git“复制”文件而不是通过文件系统进行的优势。

【讨论】:

  • 请注意,这不会移动文件,而只是将其复制到磁盘。您需要在checkout 之后添加addcommitpush
  • 那么 git checkout branchB -- path/file.java 只需签出带有文件移动的分支?
  • 如果任何一方进一步修改文件(不仅仅是如果原始分支删除它)几乎肯定会引发冲突。
  • @talex 没用。我检查了分支 A 并从那里我使用 git add 到分支 B 并没有将文件添加到分支 B
  • @talex 我又试了一次,我发现我之前犯了一个错误现在我在分支上使用了我希望文件这样的结帐: git checkout branch a file.java 然后我得到了分支 B 上的文件。该文件现在已添加到分支 B。谢谢
猜你喜欢
  • 2020-10-23
  • 2020-06-03
  • 2022-01-11
  • 2021-01-07
  • 2020-07-12
  • 2014-02-22
  • 2011-05-06
  • 2015-08-08
相关资源
最近更新 更多