git push会发生什么事情,但是其他人已经承诺了你在本地回购中没有的东西?

时间:2016-07-08 16:26:03

标签: git version-control

对不起,我是Git的新手,很难在Google上找到这些难以解释的问题(至少对我而言)的答案。

说我的名字是乔,我正和我的同事鲍勃一起制作软件程序。

我们有上游Repo A,我们在本地计算机上有Repo A克隆,我们代码,提交并定期推送相同的分支,说主人。我知道这在技术上并不是最好的方法,但举例来说。

现在,如果我们都在处理一个文件会发生什么。 那个他还没推送的Bob的本地文件有内容

// awesome program
[some edits by Bob]

我尚未推送的本地文件 具有内容

// awesome program
[some edits I made]

Bob推了推,一秒钟后我推了推。现在发生了什么?

远程文件是

// awesome program
[some edits I made]

// awesome program
[some edits Bob made]

或者,如果有办法,我希望它是

// awesome program
[some edits Bob made]
[some edits I made]

对于noobishness抱歉:(

3 个答案:

答案 0 :(得分:6)

Git会拒绝你的推动。它会告诉你服务器上有新的变化,并让你在推动之前做一个拉动。所以,你最终会得到

// awesome program
[some edits Bob made]
[some edits I made]
在本地计算机上

。然后你就可以把它推到遥控器上了。

答案 1 :(得分:5)

首先:您无法以常规git push正常推送,因为当您使用本地主控时,您的远程主控已更改。所以 git 建议你用-f选项强制推送。 ie git push -f但是除非你有interactive rebasing这样的公平理由,否则不建议强制推送共享分支!

第二:通过git的这条消息,你被告知你的远程存储库发生了一些事情,所以你做了git status,是的,它告诉你"Your branch and 'origin/master' have diverged, and have 1 and 1 different commit(s) each, respectively."。你应该更新你当地的回购;所以你正在做git pull或者在这种情况下做一个更好的命令,git pull --rebase并且令人惊讶! Git也拒绝你的拉,并告诉你在 example 文件中有冲突。这是因为你和鲍勃都编辑了相同的文件和相同的行

最后:查看此link并解决冲突。你可以保留你的变化或鲍勃或两者。然后提交更改并git push也更新您的远程仓库。那就是它!!!“

答案 2 :(得分:1)

我并非100%确定这是您要做的事情,但是当您提交时,应该会创建一个新的修订版。每个新版本都将取代以前的版本。看看这个信息是否有帮助: Git Squash Commits