我决定将库集成到我的代码中。 我添加了库,并更改了几行代码以开始实现它。 它编译,所以我承诺并推动回购。
我后来才意识到我错过了仍在旧代码上的一行。
我给它一个谷歌搜索并找到git commit --amend
,幸运的是,我没有其他提交。
我认为我所要做的就是修复代码行,git add
文件,git commit --amend
,最后git push
来回购,但是git告诉我
! [拒绝]主人 - > master(非快进)提示:更新 因为当前分支的提示落后而被拒绝
我发现这很奇怪,因为我在最近的提交中,如果我git reset -soft HEAD~1
我又回到了与回购对齐,除了单行代码我已经改变了。
我做错了吗?我真的不想为这一行代码做一个全新的提交,这段代码应该是最后一次提交的一部分。
答案 0 :(得分:4)
如果你真的想修改提交,那么你需要强制分支到远程:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="home-img-blocks">
<div class="home-img-block"><img src="http://optimumwebdesigns.com/images/test1.jpg"></div><div class="home-img-block"><img src="http://optimumwebdesigns.com/images/test2.jpg">
</div><div class="home-img-block"><img src="http://optimumwebdesigns.com/images/test3.jpg"></div>
</div>
请记住,这将覆盖远程分支,这可能会对共享分支的其他人造成严重破坏。
此外,您需要确定自您尝试修改的提交以来没有向远程分支添加新提交。强迫你的分支机构将破坏你提出的任何新工作,这些工作是在有关提交之后制作的。
正如你所知,这里有很多可能出错的事情。因此,一个更安全的策略,以及我为您推荐的,只需在 new 提交中修复缺少的代码行,然后将更改推送到远程。
<强>更新强>
您收到git push origin master --force
错误的原因是因为修改本地分支的HEAD上的提交实际上导致您的本地分支从远程启动发散。这是一个图表,显示在修改之前您的本地和远程Updates were rejected because the tip of your current branch is behind
分支看起来像:
master
换句话说,你是最新的。但是,当您在本地修改提交remote: A -- B -- C
local: A -- B -- C
时,实际上使用全新的提交(使用新的SHA-1哈希)替换它。 修改后的图表如下所示>>
C
当你尝试推送时,Git认为提交remote: A -- B -- C
local: A -- B -- C'
是共同的祖先,并且你实际上在远程B
之后。另一种绘制方法是:
master
Git没有意识到您打算将修改后的提交替换为遥控器上的remote: A -- B -- C
local: \_ C'
,因此您必须强制推动才能实现此目的。