我正在使用cakephp网站之一,我使用git作为版本控制器。我有两种不同的分支:
1)发展 2)ui
当我尝试使用此命令将我的最新更改从开发推送到ui分支时: git push web ui ,将显示以下消息。
Counting objects: 43, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (28/28), done.
Writing objects: 100% (29/29), 66.67 KiB | 0 bytes/s, done.
Total 29 (delta 15), reused 0 (delta 0)
remote: Already on 'ui'
remote: ----------------------------------------------------------------
remote: Deployed ui to Leo
remote: ----------------------------------------------------------------
To ssh://git@wasteaccountant.com/srv/git/wa.git
bdc7d80..01e85ea ui ->ui
但是当我在git服务器上检查 ui 分支时,该特定分支上没有更新。 但我可以看到我在浏览器中检查时所应用的更改。
更新了问题:
以下是我以前运行的命令的步骤:
1)git status
2)git checkout development //开发分支的名称
3)git add
4)git commit
5)git push //仅在开发分支上推送开发更改
6)git checkout ui // ui branch的名称
7)git merge development
8)git push web ui //推动对ui分支的更改
无论我在开发分支上推动什么,我都可以在git存储库上看到所有更改,但是ui分支没有运气。
注意:如果我使用 git push -f 命令,它将正常工作。对我来说很奇怪!
-------------------------------------------- -------------------------------------------------- ----
任何人都可以建议我该怎么做?或者我在命令中犯了错误?
谢谢!
答案 0 :(得分:2)
当我尝试使用此命令将我的最新更改从开发推送到ui branch时:
git push web ui
将分支推送到另一个分支是:
git push web development:ui
第一次推动:
ui
分支上完成的新提交更新远程ui
提交(这意味着0提交,因为您已在development
分支上完成提交)但是,在您的情况下,在将dev
合并到ui
后,您正在使用dev提交更新ui分支,因此它应该可以正常工作。
但是:如果它仅在git push -f
之后有效,则意味着第一次推送应该因为非快进推送而失败。
在dev
之后完成的后续推送(在从ui
到push -f
的又一次合并之后)应该可以正常工作。
现在它的工作没有任何其他非常难的命令,但只是使用git push。再次感到奇怪!你知道原因吗?
如果你的本地和repo提交共享相同的历史记录(在git push -f之后应该是这种情况),那么然后任何后续推送都会添加到该历史记录中(不需要强制它) 。
所以这将有效:
git push origin ui
实际上,如果您设置了 upstream branch (通过git push -u origin ui
,请使用git config branch.ui.remote
进行检查),这样就可以了:
git push
(检查您的 push policy )
答案 1 :(得分:1)
尝试在您的服务器上执行git reset --hard
。当您推送到远程非裸仓库时,分支不会被检查。执行git reset --hard
时,它将删除它在工作目录中看到的所有更改,有效地前进到上次提交。您可以将git reset --hard
添加到服务器上的post-fetch挂钩。