4

我在 GitHub 上设置了一个带有 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 ![rejected]
Dev -> Dev (fetch first) error: failed to push some refs to ' https://github.com/ex/ex.git' 提示:更新被拒绝,因为远程包含您所做的工作提示:本地没有。这通常是由另一个存储库推送提示引起的:to the same ref. 您可能希望在再次推送之前先合并远程更改(例如,提示:'git pull')。提示:有关详细信息,请参阅“git push --help”中的“关于快进的说明”。

我按照它说的去做并执行:

git pull origin Dev

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

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

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

4

2 回答 2

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

或者,变基的结果:

$ 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
于 2013-08-27T14:52:29.483 回答
1

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

  • 你必须拉因为 dev@origin 是“新的”

  • 随着您将 dev@origin 合并到本地开发人员的拉动

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

  • 最后 dev@origin 与您的提交合并(因此 dev 与 dev 合并)

于 2013-08-27T11:39:44.020 回答