1

git handel 怎么会出现这样的情况。

一个由 git 管理并托管在 Github 上的项目有许多合作者。两个从事一个项目的人在本地计算机上对同一个文件进行了更改。例如,他们都在处理样式表。然后他们都提交最新的更改并将它们发送到 Github。

这不会引起问题吗,如果他们都在样式表中更改了不同的内容,那么只有一个人的工作会成为最新的版本,而其他人的工作将成为历史。

我不太明白如何处理这种情况以防止在多人处理同一个文件时丢失新的更改。

谁能解释它是如何工作的?

4

3 回答 3

3

补充 Charlie Rudenstal 的回答:第一个合作者的推动会成功。第二个协作者的推送将失败,并显示“拒绝,非快进”消息。然后第二个协作者获取最后的更改,将它们与他的更改合并(可能解决合并冲突)并再次推送,然后它将成功。

于 2012-07-30T11:31:41.080 回答
0

如果第一个协作者已经进行了推送,则来自第二个协作者的推送将被拒绝。然后,第二个协作者必须先完成第一个协作者的更改,git fetch然后git merge他或她才能再次尝试推送提交。(或者git pull但要注意怪癖http://longair.net/blog/2009/04/16/git-fetch-and-merge/

git merge会尽量自动合并。无法自动合并的文件将显示为冲突。这些必须手动解决,通过手动编辑冲突文件或使用git mergetool.

冲突文件的内容可能如下所示:

<<<<<<< HEAD:file.txt
Hello world
=======
Goodbye
>>>>>>> 77976da35a11db4580b80ae27e8d65caf5208086:file.txt

已解决的文件被标记为已解决并使用git add. 如果在合并期间出现任何冲突,则协作者现在必须git commit在推送更改之前进行。

还。另一种使用方法git pull --rebase我什么时候应该使用 git pull --rebase?

于 2012-07-30T11:26:28.037 回答
0

第一个推送到 github 上服务器的人获胜。这是通过 解决的git,而不是 Github。下一个人会收到一条消息,说他们的推送被拒绝了。

! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'ssh://<url>'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

http://gitref.org/remotes/#push

于 2012-07-30T11:30:15.820 回答