【问题标题】:Branch is merging into self on git push分支在 git push 上合并为 self
【发布时间】:2013-08-30 02:59:28
【问题描述】:

我在 GitHub 上设置了一个带有 Dev 分支的存储库,我使用以下命令将其克隆到本地计算机:

git clone https://github....

然后我使用以下命令切换到我的开发分支:

git checkout -b Dev

然后我拉动只是为了确保所有内容都是最新的

git pull origin Dev

我现在在我的 Dev 分支中,编写一些代码并使用以下命令添加文件:

git add filename

然后我使用:

git commit -m "message"

然后我使用:

git push origin Dev

这一切都很好。然后第二个用户出现并输入一些代码。同时我正在处理一个单独的文件,但我们正在处理同一个分支。我像以前一样添加和提交。但是,当我尝试推送时,我收到以下信息:

https://github.com/ex/ex.git! [拒绝]
Dev -> Dev(首先获取)错误:未能推送一些 参考“https://github.com/ex/ex.git”提示:更新 被拒绝,因为遥控器包含您提示的工作:不是 在当地有。这通常是由另一个存储库推送引起的 提示:相同的参考。您可能需要先合并远程更改 (例如,提示:'git pull')在再次推动之前。提示:见'注 'git push --help' 中关于快进'的详细信息。

我按照它说的去做:

git pull origin Dev

然后我可以像以前一样推动,一切似乎都很好。但是,当我检查提交历史时,回到 GitHub,我看到了:

 Merge branch 'Dev' of https://github.com/ex/ex into Dev

在我刚刚添加的提交中。为什么会发生这种合并?我怎样才能阻止这种情况发生?

【问题讨论】:

  • git pull 基本上是git fetch; git merge

标签: git github git-merge git-push git-pull


【解决方案1】:

之所以需要合并,是因为您和您的第二个用户分道扬镳;你们每个人都在共同的基础上做出了一些事情。重新同步需要结合两种开发路径。

“合并提交”没有任何害处;这真的不值得担心。但是,如果您想避免它,通常是为了保持更清晰的历史记录,您可以执行以下操作:

git pull --rebase ...

这会将您的新提交重新定位到从存储库中提取的任何内容。历史将显示为线性。

这是一个例子。一个有两个分支的仓库:

$ git log --oneline --graph --all    
* 678ea83 c
| * 2c1e48f b
|/  
* 5836f6f a

合并结果:

$ git merge dev
Merge made by the 'recursive' strategy.
 0 files changed
 create mode 100644 b
$ git log --oneline --graph --all
*   6d50134 Merge branch 'dev'
|\  
| * 2c1e48f b
* | 678ea83 c
|/  
* 5836f6f a

或者,变基的结果:

$ git rebase dev
First, rewinding head to replay your work on top of it...
Applying: c
$ git log --oneline --graph --all
* 89a3771 c
* 2c1e48f b
* 5836f6f a

【讨论】:

    【解决方案2】:

    因为您的最后一次提交已集成:

    • 你不得不拉,因为 dev@origin 是“新的”

    • 通过 pull 你将 dev@origin 合并到本地 dev

    • 您的本地开发人员有一个提交,您最初想将其推送到原点

    • 终于 dev@origin 与您的提交合并(因此 dev 与 dev 合并)

    【讨论】:

    • 除此之外,您可能还想git pull --rebase 或在配置文件中设置相应的标志。
    • 您现在可以通过执行以下命令来防止所有项目出现这种情况:git config --global pull.rebase true 用于 git >=1.7.9 或 git config --global branch.autosetuprebase always 用于 git
    猜你喜欢
    • 2012-11-11
    • 2020-08-01
    • 2023-03-06
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 2011-12-31
    相关资源
    最近更新 更多