我正在为 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.
该标志是否适合我的方案?
无法承受丢失其他提交以及随后的其他文件,则不应使用 --force
!
而是使用拉取来拉入其他进程的更改,然后在之后推送:
git pull origin master && git push origin master
如果您想让您的存储库清除合并提交,请考虑使用 pull --rebase
:
git pull --rebase origin master && git push origin master
请注意,pull
和push
之间有一个轻微的窗口,再次提交可能会溜进来,如果命令没有通过,请考虑根据需要重复该命令。但请记住,这可能会导致挂起。