我想推送我的本地文件,并将它们放在远程仓库中,而不必处理合并冲突。我只希望我的本地版本优先于远程版本。
我怎样才能用 Git 做到这一点?
您应该能够通过使用强制对远程仓库进行本地修订
git push -f <remote> <branch>
(例如git push -f origin master)。离开<remote>并将<branch>强制推送所有已设置的本地分支--set- upstream。
git push -f origin master
<remote>
<branch>
--set- upstream
请注意,如果其他人共享此存储库,他们的修订历史将与新的冲突。如果他们在更改点之后有任何本地提交,他们将变得无效。
更新 :我想我会添加一个旁注。如果您正在创建其他人将查看的更改,那么创建一个包含这些更改的分支并定期 rebase 以使它们与主开发分支保持同步并不少见。只需让其他开发人员知道这将定期发生,这样他们就会知道会发生什么。
更新 2 :由于观看者数量的增加,我想添加一些额外信息,说明当您upstream遇到强制推送时该怎么做。
upstream
假设我已经克隆了您的 repo 并添加了一些提交,如下所示:
D----E话题 / A----B----C开发
但是后来development分支被 a 击中rebase,这将导致我在运行时收到如下错误git pull:
development
rebase
git pull
拆包对象:100% (3/3),完成。 来自 <repo-location> * 分支开发 -> FETCH_HEAD 自动合并 <文件> CONFLICT(内容):合并 <locations> 中的冲突 自动合并失败;修复冲突,然后提交结果。
在这里我可以解决冲突和commit,但这会给我留下一个非常丑陋的提交历史:
commit
C----D----E----F话题 // A----B-------------C'发展
使用它可能看起来很诱人,git pull --force但要小心,因为这会让你陷入搁浅的提交:
git pull --force
D----E话题 A----B----C'发展
所以可能最好的选择是做一个git pull --rebase. 这将要求我像以前一样解决任何冲突,但对于每一步而不是提交,我将使用git rebase --continue. 最后,提交历史看起来会更好:
git pull --rebase
git rebase --continue
D'---E'主题 / A----B----C'发展
更新 3: 您还可以将该--force-with-lease选项用作“更安全”的强制推送,[正如回答中提到的那样
--force-with-lease
如果远程上出现您未预料到的新提交(从技术上讲,如果您尚未将它们提取到远程跟踪分支中),使用“租约”强制推送允许强制推送失败,这在以下情况下很有用您不想意外覆盖您甚至还不知道的其他人的提交,而只想覆盖您自己的: git push <remote> <branch> --force-with-lease --force-with-lease您可以通过阅读以下任何内容来了解有关如何使用的更多详细信息: git push文件 [Git:如何忽略快进并将原点 [分支]
如果远程上出现您未预料到的新提交(从技术上讲,如果您尚未将它们提取到远程跟踪分支中),使用“租约”强制推送允许强制推送失败,这在以下情况下很有用您不想意外覆盖您甚至还不知道的其他人的提交,而只想覆盖您自己的:
git push <remote> <branch> --force-with-lease
--force-with-lease您可以通过阅读以下任何内容来了解有关如何使用的更多详细信息:
git push