为了制作一个正常的rebase我做
$ git checkout branchA
$ git rebase master
$ git checkout master
$ git merge branchA
确定。
我的问题是来自其他仓库的我的分叉,我添加了三个提交,当我做
git pull --rebase otherRepo master
获取otherRepo提交,我的提交转到日志的HEAD,但是当我尝试推送时
! [rejected] HEAD -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:juanpabloaj/homebrew.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again. See the
'Note about fast-forwards' section of 'git push --help' for details.
带
$ git push --force
我可以将我的提交推送到我的远程仓库,但每次拉动都是同样的事情,
这是正确的方法吗?
答案 0 :(得分:1)
git fetch otherRepo master
gitk --all
执行此操作,您将能够看到otherRepo / master的确切状态。这将帮助您弄清楚发生了什么。 git fetch
更新其他资源/主人的视图(以便您可以查看其最新状态),但不会将其与任何内容合并。
答案 1 :(得分:1)
你的问题在这里:
git pull --rebase otherRepo master
当您使用git pull --rebase
时,您在master上的本地提交将在其他Repo主服务器的新提交之上重播。因此,当您向原点推送时,这将成为非快进推送(请参阅here以解释快进合并)。所以git默认不允许这样做。
解决方案很简单,从otherRepo中提取时不要将--rebase
与git pull
一起使用:
git pull otherRepo master
答案 2 :(得分:0)
如果你从一个回购中拉出来,那么立即尝试推送,并且它以“非快进”失败,然后其他东西正在进行。也许其他人推动了提交,或者也许你没有拉/推你认为自己的想法。通过强迫推进,你正在摧毁历史,除非你完全清楚自己在做什么,否则你可能会在没有意识到的情况下失去工作。