Git:合并两个工作副本而不提交

时间:2017-11-14 22:59:49

标签: git-merge patch

我有一个用于服务器开发的克隆,另一个用于客户端开发。这两种材料最终会使它成为同一个分支,但是我想要同步它们,我希望它能够执行合并,好像我已经提交了推送和拉动,但我想在没有它的情况下这样做。

我能够使用我编写的这个脚本制作补丁:

git diff --cached
git diff

在服务器上,但将其应用于客户端很多更难。

我已经尝试过Unix patch命令,出于某种原因,它一直在问我要修补哪些文件,就像我找不到它们一样。 (是的,他们在那里)我已经尝试了

git apply -3 patch.patch

但是这会产生很多错误,例如"有冲突" (不进行任何更改)和"与索引"不匹配。它似乎甚至没有尝试修补另一半文件。

Stashing,然后应用补丁,然后从存储中弹出不起作用,因为unstashing拒绝合并。

1 个答案:

答案 0 :(得分:1)

看起来这样做 out 拉动不起作用 - 我还没有找到方便安全地做到这一点的方法。但是,我提交的问题是我不想像垃圾一样垃圾邮件git日志:

  

同步到客户端

     

同步回服务器

     

糟糕!同步我忘记了服务器的东西!

但我可以通过提交,然后从远程回购中提取来避免这一切。最后,我不必推送这些提交,因为我会使用reset从本地仓库中删除所有提交,然后,在工作目录中进行所有更改后,执行适当的提交并推送它。 / p>

Gotachas

他们很多。

  • 众所周知,如果已经从中取出某些东西,则不应该重置本地仓库。这可能是因为当一个repo delete提交另一个repo认为存在时会产生明显的混淆。出于这个原因,在重新开始共享代码之前对两个repos执行相同的重置非常重要。
  • 如果在您完成了以后想要重置的提交之后,那么拉/合并,您可能会让自己变得非常困难。应该有办法管理它,但我还没有想出来。一个想法是再次重置,存储,拉取,合并和提交。另一个涉及使用-n选项恢复。

说明

以下示例假设您有2个克隆;一个名为"客户"和另一个"服务器"。

  1. 关注https://help.github.com/articles/adding-a-remote,设置您的客户和服务器的回购对方'他们可以相互拉扯的系统。
  2. 当您想要同步时,只需在捐赠者系统上进行提交,然后从远程提取,而不是从原点拉出来。假设客户端想要从服务器提交。在客户端:: git pull myserver-repo mybranch
  3. 根据需要合并和解决冲突。
  4. 根据需要循环回2次。
  5. 经过几次2-4的迭代后,您就可以准备好将更改推送到服务器了。转到您想要推送的所有更改的本地仓库,然后运行git log。在第一次提交之前找到提交 2.将其哈希复制到剪贴板。
  6. 然后git resetgit reset <hash you copied in 5>
  7. 然后,您应该看到您不希望从日志中消失的所有提交以及工作目录中的所有更改。提交并推送。
  8. 您对没有执行5-7的仓库进行清理非常重要。因此,如果您从服务器仓库推出,则需要在客户端上执行相同的重置操作,然后根据需要免除更改。我首选的方法是git stash save "delete_me"