如何在不检出的情况下推送git代码?

4
我有两台电脑A和B,并使用git同步一些文件,例如init.el。 A的存储库托管在unfuddle上。B的存储库是本地的。
  • A中的init.el已被修改并推送。
  • B中的init.el也被修改了。
问题是:如何将A的更改合并到B中,并将最终的init.el推送到unfuddle(A),而不扩展B中的所有文件?
或者还有更好的解决方案吗?
谢谢。

请查看 Git 书籍以获取强制推送选项。 - jake
@jake:这将用A中的更改覆盖B中的更改。我不认为这是OP的意图。他想要合并。 - Koraktor
“不扩展A在B中的所有文件”,您的意思是不将文件拉到B中,因为文件太大了吗? - Kjuly
A的文件与B无关。 - user1122445
3个回答

2

因此,如果您不想拉取在A修改的文件,可以按照以下方式操作:

B处创建一个新分支并将其推送到远程服务(如您所说的unfuddle):

cd path/to/init.el
git branch featureModifiedInB
git checkout featureModifiedInB
git push origin featureModifiedInB

A 处,拉取在 B 创建的分支的更新,处理合并和冲突:

cd path/to/init.el
git pull origin featureModifiedInB  // Or you can do fetch and manually do merging.
git checkout master
git merge featureModifiedInB

// After solve the conflict if it exists.
git push origin master

它确保使用 B 的人看不到由使用 A 的人编辑的文件。但这会导致一个问题:pB 无法获取关于自己创建的代码的反馈。但是,pA 也可以修改 featureModifiedInB 分支并让 pB 拉取(嗯..有点麻烦..)。


0

有几个选项:

  • 如果您不想保留 A 的更改,git push -f origin master。请注意,强制推送会对那些从您分支并想要合并的人造成一些问题。
  • 软重置到 A 和 B 之间的最后一个公共提交点,git stash,拉取,合并,弹出存储(将存储与当前代码合并),提交和推送。如果有人在那个公共提交点之后从您分支,他们将无法轻松地合并回来,甚至可能根本无法合并。

0
如果A和B是完全无关的(正如你所说“ A的文件不知道B的文件,反之亦然”),那么你不需要合并它们。只需推送A和B,不要合并它们。
如果您想要更多的分离,请创建另一个存储库来容纳B中的工作。使用Unfuddle允许/禁止访问。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接