如果远程在特定的提交上,是否可以仅使用git force push?

时间:2018-07-12 14:16:30

标签: git

说我要压榨master的最后3次提交;强制推送可能会擦除同时引入的提交。

正在做

git fetch master
git rev-list origin/master --max-count=1
git push // only push if hash returned by above is not new

如果第三方在git rev-listgit push之间推送提交,则将无法正常工作。

3 个答案:

答案 0 :(得分:3)

您想要的被称为“租赁的力量”,并且可以在任何 modern Git服务器上使用。但是,那里有很多旧的(非现代的)Git版本,因此您必须检查服务器是否支持此选项。如果远程服务器的Git版本至少为1.8.5,则可以选择。 (当然,您的客户端也需要该选项,但是至少在这里您可以控制:如果您的Git是古老的,则可以安装更新的。)

如果服务器确实具有该选项,则只需运行:

git push --force-with-lease origin branchname

只有当您自己的branchname匹配时,才能让Git在原始位置调用Git,并根据需要提交新的提交,然后让服务器替换服务器的origin/branchname此刻服务器的branchname。如果服务器的branchname 不匹配,则可以运行git fetch origin更新自己的origin/branchname,以查看在此期间发生了什么。

答案 1 :(得分:1)

完全受保护的运行方式是

git push --force-with-lease=master:<output of the `git rev-list`> origin master

它还可以保护git fetch

之后发生的git rev-list

答案 2 :(得分:0)

首先@torek是绝对正确的。 并完成他对较旧版本的回答:

是的,您可以计算本地分支之间的提交次数
和远程,如果您的计数器> 0,请尽力

# count the number of commits between local and remote 
git rev-list --count master...origin/master

# if there only a single commit 
if [ $count -eq 1 ]; then

    # do a force push as your request   
    git push .......
fi