据我所知,没有办法做你想做的事。
当您尝试将某些提交推送到远程存储库时,Git 会检测您当前的分支是否落后于其远程分支,在这种情况下它会提示错误:
! [rejected] master -> master (non-fast-forward)
以以下场景为例:
A - B - C - D (remote master)
\
- E (local master)
如果你在这种情况下尝试推送,Git 会阻止你并建议:
更新被拒绝,因为您当前分支的尖端落后于其远程分支。在再次推送之前合并远程更改(例如“git pull”)。
也就是说,您必须获取远程分支,合并更改,然后推送合并的结果。 Git 会阻止您推送可能与远程分支冲突的更改,并要求您在推送之前在本地合并更改(并可能解决冲突)。
作为旁注,您可以使用git push --force 在 Git 中推送非快进更改(即避免获取远程)。应尽可能避免强制推送,因为它可能会产生一些令人不快的后果,例如使某些人可能已经拉取的提交无法访问。
在前面的场景中,强制推送会导致:
A - B - E (remote/local master)
如您所见,这会给在之前状态下拉遥控器的人带来一些麻烦。
有关git push --force 后果的详细说明,请参阅this 堆栈溢出问题。
您还可以在 Git 中执行的操作是获取远程并仅签出一些文件。您可以通过以下方式实现:
git fetch
git checkout FETCH_HEAD -- <file-path>
但这并不能解决您的问题,因为它仍然会获取远程并且不允许您在没有合并的情况下推送。