【问题标题】:Is git push --force suitable for forcibly updating a remote file concurrently?git push --force 是否适合同时强制更新远程文件?
【发布时间】:2014-03-13 20:20:05
【问题描述】:

我正在为 Jenkins 作业开发自动化脚本。该脚本采用参数$1,对存储库文件进行小幅更改并推送更改。它只是这样做:

git clone repo
echo > $1
git commit -a -m 'updated'
git push

当这些 Jenkins 作业同时执行时,git push 经常失败:

! [rejected]        master -> master (non-fast-forward)

这是完全可以理解的。但我想强制推送,因为已经保证每个脚本调用都会获得不同的$1

从手册页中,我了解到:

--force           
       ... This flag disables these checks,
      and can cause the remote repository to lose commits;
      use it with care.

该标志是否适合我的场景?

【问题讨论】:

    标签: git git-push fast-forward


    【解决方案1】:

    你应该使用--force,如果你不能承受丢失其他提交和随后的其他文件!

    改为使用 pull 来拉入其他进程的更改,然后再推送:

    git pull origin master && git push origin master
    

    如果您想让您的存储库清除合并提交,请考虑使用pull --rebase

    git pull --rebase origin master && git push origin master
    

    请注意,pullpush 之间有一个小窗口,再次提交可能会滑入,如果没有通过,请考虑根据需要重复该命令。但请记住,这可能会导致挂起。

    【讨论】:

    • 这很有帮助,谢谢。我将命令放在一个简单的循环中,如下所示:for i in {0..4}; do git pull --rebase origin master && git push origin master; done
    猜你喜欢
    • 2014-09-06
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    相关资源
    最近更新 更多