如何解决Git非快进被拒绝
我觉得这个问题已经被问过很多次了,但是解决的方法通常是“我删除了目录,并用新的结帐重新完成了我的工作。”我进行了一次提交并推送,但是意识到我引用了错误的票证提交消息中的编号。因此,我在SO上寻求一种快速解决方案,最后在终端中输入以下内容:$ git reset --soft HEAD^
$ git commit -m \"... correct message ...\"
唯一的问题是我收到以下错误消息:
To prevent you from losing history,non-fast-forward updates were rejected
Merge the remote changes before pushing again. See the \'Note about
fast-forwards\' section of \'git push --help\' for details.
我正在使用git-flow模型,并正在开发分支。我怎样才能重新合并东西使git再次开心呢?
解决方法
力
git push
:
git push origin +develop
,如果将提交推送到服务器,然后在本地重写该提交(使用git reset
,git rebase
,git filter-branch
或任何其他历史操作),然后将该重写的提交推送回服务器,您将搞砸其他任何拥有拉。这是一个例子;说您已提交A,并将其推送到服务器。
-*-*-A <-主
-*-*-A <-起源/母版
现在,您决定以您提到的方式重写A,然后重新设置并重新提交。请注意,这留下了一个悬空的提交A,由于无法到达,最终将对其进行垃圾回收。
-*-*-一种
\\
A \'<-大师
-*-*-A <-起源/母版
如果有人,比如弗雷德,在执行此操作时从服务器中拉出master
,他们将获得对A的引用,他们可以从此开始工作:
-*-*-A \'<-主
-*-*-A <-起源/母版
-*-*-A-B <-弗雷德/大师
现在,如果您能够将A \'推送至原点/主节点,这将创建非快进操作,则其历史记录中将不会包含A。因此,如果Fred再次尝试拉,他将突然不得不合并,并重新引入A提交:
-*-*-A \'<-主
-*-*-A <-起源/母版
-*-*-A-B-\\
\\ * <-弗雷德/大师
一种\' - /
如果Fred恰好注意到这一点,那么他可以进行重新设置基准,这将阻止提交A再次出现。但是他必须注意到这一点,并记住要这样做;如果您有多个人将A拉倒,则他们都必须重新设置基准,以避免在树中获得额外的A提交。
因此,通常不要在其他人提供的回购中更改历史记录。但是,如果您碰巧知道没有其他人正在从该存储库中提取信息(例如,这是您自己的私人存储库,或者您只有一个其他开发人员可以轻松与该项目进行协作),那么您可以通过运行以下命令来强制更新:
git push -f
要么
git push origin +master
这些都将忽略对非快进推送的检查,并将服务器上的内容更新到新的A'版本,放弃A版本,以便最终对其进行垃圾回收。
使用receive.denyNonFastForwards
config选项可能会完全禁用强制推送。默认情况下,此选项在共享存储库上启用。在这种情况下,如果您确实要强制执行推送,则最好的选择是删除分支并使用git push origin :master; git push origin master:master
重新创建它。但是,出于某种原因启用了“ 12”选项,如上所述。在共享存储库上,这意味着现在使用该存储库的每个人都需要确保他们根据新的历史记录进行基础。
在共享存储库上,通常最好将新的提交放在最上面,以解决您遇到的任何问题;您可以使用git revert
生成将撤消先前提交的更改的提交。
,您可能需要做git pull
,它可能会自动为您合并内容。然后,您可以再次提交。如果有冲突,它将提示您解决冲突。
请记住,如果您尚未更新gitconfig以指定...,则必须指定要从哪个分支中提取...
例如:
git pull origin develop:develop
,我使用EGit时也遇到了这个问题。只是尝试在当前分支上rebase
而已。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。