如果我挑选的话,为什么我不能推动这些改变

igo*_*024 1 git rebase git-rebase cherry-pick git-cherry-pick

我试图通过rebase/cherry-pick删除最后两次提交.调用后git rebase HEAD^^^ -i,我只留下必要的承诺(把一切都达到HEAD^^,所以我下降HEAD^HEAD).

git push我看到以下内容之后:

! [rejected]        dev -> dev (non-fast-forward)
error: failed to push some refs to 'git@bitbucket.org:XXXXXX/YYYYYYYYY.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
Run Code Online (Sandbox Code Playgroud)

git pull只是快速前锋和前HEAD提交.所以,我最终得到了我的开始.我究竟做错了什么?

mea*_*gar 5

这不是关于挑选樱桃,而是关于变基.在rebase之后,您的本地和远程分支将发生分歧,需要合并.Git永远不会在远程执行合并(除非它是一个快进合并,意味着只有一个分支已经提前),所以它需要你拉动并在本地进行合并.

问题是,合并不是你想要的.您明确要放弃远程分支上的"分歧"提交,并使用本地分支的状态覆盖它.

您可以这样做git push -f,但只有在您不与其他人共享此分支时才应该这样做.否则,他们最终会将您的更改删除,将它们与自己的副本合并,并重新引入您尝试删除的提交.

如果你正在分享这个资源库和谁可能有分支签出其他人,你有两个选择.

要么...

  • 无论如何都要强制推送,然后联系在该分支上合作的每个人,并建议他们丢弃他们的本地副本.发送给他们这个单行,并建议他们存储他们可能有的任何变化:

    $ git fetch && git checkout dev && git reset --hard origin/dev
    
    Run Code Online (Sandbox Code Playgroud)

    在这之后,他们可能已经失去了对当地dev分支机构的承诺; 他们可以采摘樱桃来恢复它们.

要么...

  • 不要做你想做的事.你不应该在共享分支上重写历史记录,它只会给其他人带来麻烦.