我在GitHub上设置了一个repo,带有一个Dev分支,我用它克隆到我的本地机器:
git clone https://github....
然后我使用:
切换到我的Dev分支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
在我刚刚添加的提交中。为什么这次合并发生了?我怎样才能阻止这种情况发生?
答案 0 :(得分:2)
需要合并,因为您和您的第二个用户分道扬..你们每个人都有一个共同的基础。重新同步需要结合两个开发路径。
'合并提交'不会造成任何伤害;它真的不值得担心。但是,如果你想避免它,通常是为了保持一个更清晰的历史,你执行:
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
或者,rebase的结果:
$ 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
答案 1 :(得分:1)
因为您上一次提交已整合:
你必须拉,因为dev @ origin是“更新”
你将dev @ origin合并到你的本地开发
您的本地开发者有一个提交,您最初想要推送到
最后dev @ origin与你的提交合并(所以dev与dev合并)