【问题标题】:Git Easy rebase?Git 轻松变基?
【发布时间】:2020-07-01 00:39:25
【问题描述】:

我最近不得不从 mercurial 切换到 git,而我的正常工作流程复制起来变得非常烦人,所以我正在寻找一些指针。很高兴回答我在这里想念的任何事情。但我喜欢做的事情如下:

  1. 在 master 上,拉取所有最近的更改。
  2. 从 master 创建我的工作分支。
  3. 实际上只是将所有内容修改为我的第一个提交。
  4. 推送更改以供审核。
  5. 解决问题,再修改,再推送
  6. 如果我以某种方式落后于 master 分支,我通常只是将所有更改拉到 master 上,让我的分支位于它们之上,以避免在登陆之前发生合并冲突。
  7. 土地。

我的问题:

因此,由于 gits 结构很好,我已经放弃了不断的修改。因此,现在在任何 cmets 之后,我都会进行新的提交。当我落后于主人时,真正的问题发生了。我通常提交我的更改。去找师傅。混帐拉。切换回我的分支 git rebase master 并尝试重新推送我的更改。由于某种原因,这总是与以下“我的分支在其远程对应物后面”中断。我在这里想念什么?

谢谢

【问题讨论】:

  • 你能详细说明这是怎么破的吗?除了您可以保存切换到主 (git fetch origin && git rebase origin/master) 的事实之外,工作流程听起来完全合理。
  • 它一直说“我的分支落后于它的远程分支”,从非主控运行该命令是否安全?假设我没看错的话。
  • 你说,这个 [...] 总是坏掉中断是什么意思?您需要解释您遇到的具体问题。
  • git fetch 只是更新您的 本地 副本 origin,它非常安全。然后,您可以在任何分支之上重新设置任何分支。从 git 的角度来看,它是安全的——假设从功能的角度来看它是有意义的。
  • @Mureinik 出于某种原因使用它似乎与我所做的相比。谢谢!

标签: git version-control


【解决方案1】:

注意:hg pull == git fetch(并且不是 git pull,与hg pull -u相当)。

您看到的关于您的分支落后的错误消息肯定是由称为非快进合并/推送的东西引起的。当你变基时,你改变了现有的历史。如果您已经推送了旧版本的历史记录,那么它与您的本地版本不同,因此 git 会告诉您它无法推送您的分支,因为它会修改历史记录。您有两个选择:1. 合并(在这种情况下不是您想要的)2. 强制推送

另请阅读Git push rejected "non-fast-forward",它为这个问题提供了解决方案。

免责声明:除非您真的知道自己在做什么,否则切勿在共享分支上强制推送历史记录。强制推送会破坏现有历史,如果旧历史已被其他人使用,那么您将来会遇到一些令人讨厌的惊喜。

也就是说,解决方案基本上可以归结为:

git fetch
git rebase origin/master
git push origin +your_branch:your_branch

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    相关资源
    最近更新 更多