我正试图找出一个奇怪的事情。我不知道我是不是做错了什么,但是在这里:
我有两个分支:“Web”和“ios-web-dev”。
我的git status
:
# On branch ios-web-dev
nothing to commit, working directory clean
我使用了以下命令:
git add -A .
git commit -m "[SIMULATOR] brightness control // get results // local storage"
git pull
git push origin ios-web-dev
这是我的git log
:
commit e38c75f73c2d3b1ee40d41f87f1a09c0a51b3161
Merge: 0bc2991 f617068
Author: Mauricio Giordano <mauricio.c.giordano@gmail.com>
Date: Tue Jan 14 01:16:51 2014 -0200
Merge branch 'ios-web-dev' of github.com:estudiotrilha/InEvent into ios-web-
commit 0bc29916e10861c40aafc208a86e7a4db9fafc4b
Author: Mauricio Giordano <mauricio.c.giordano@gmail.com>
Date: Tue Jan 14 01:16:28 2014 -0200
[SIMULATOR] brightness control // get results // local storage
为什么合并存在及其含义?
谢谢!
答案 0 :(得分:1)
其他人已经将更改推送到您所在的分支机构。当你执行git pull
时,git获取了原始的更改,并将它们合并到本地副本中。 为什么你正在运行git pull
,这显然是它的用途。
答案 1 :(得分:1)
Git总是要研究历史。因此,如果您进行提交然后从远程仓库中提取提交,则必须在本地仓库历史记录之上合并该提交。如果您在本地没有任何新提交,则您的本地仓库将只fast-forward
并在顶部添加远程提交。但是,由于您进行了一次(+)提交,git会自动将您的更改合并到历史记录之上。您可以从技术上隐藏您的更改,从远程执行,然后在顶部应用您的更改。我不一定会推荐这个。
假装您进行了初始提交(1
)并将其推送到远程仓库。如果同事在推送它之前接受了该提交并添加了提交(2
),那么现在远程将位于2
(历史为2-1
)。现在你添加另一个提交(3
)并尝试从远程提取。 Git会发现您的本地历史记录为3-1
,而远程历史记录为2-1
。 你的2
提交在哪里? Git必须以某种方式将其纳入你的历史......所以它会合并。您没有要求git重写历史记录(3-2-1
),因此它尝试将其合并到顶部(2-3-1
)。现在它只是在2
之上应用了3
的更改,因此它必须进行提交,因此Merge branch 'ios-web-dev' of github.com:estudiotrilha/InEvent into ios-web-
。
现在,如果您尝试推送到远程(使用历史记录2-1
),则会收到错误,因为您的本地仓库(包含历史记录3-1
)缺少某些历史记录。您可以(但不应该)执行强制推送的git push <branch> -f
(并使用远程覆盖本地,有效删除提交2
)。如果您在推送到遥控器之后从未提交过3
,那么git就可以拉2
,因为它可以在您的本地2
之上追加(快速前进)1
{1}}(2-1
)。
有时候我会在保存此提交之前执行git-stash
,但通常如果我知道有人做了我需要的更改而我在本地仓库上没有做太多工作(没有需要提交的内容) )。该示例工作流程可以是:
git status # a few working changes
git stash # save your working changes to a temporary commit
git pull origin <branch> # merge in the remote, fast-forwarding your repo
git stash apply # apply your working changes from before
如果您的本地存储库上有多个提交,您可以在技术上使用git-rebase
来获取提交下方的历史记录,以避免此额外提交消息。因此,如果您在本地3-1
且遥控器位于2-1
,则可以在您的2
之前将当地分支机构改为3
,并拥有3-2-1
。但是,这不值得麻烦(在我看来)并超出了这个答案的范围。