请想象一下:
我的同事和我正在主分公司工作。我已经更改(添加和删除)了一些代码。与此同时,我的同事做了一些更改,并将commit
推送到主分支。
现在我当前的工作目录与master分支不同,我想在主分支和工作目录上保留两个更改。
在这种情况下我该怎么做?
如果我进行推送,主分支将与我的工作目录相同(我的同事的更改将会消失),如果我先进行拉取,自然我所有的更改都会走了无论如何,我该如何处理这种情况?
答案 0 :(得分:3)
使用Git时,您的更改和同事的更改都不会轻易丢失。一旦提交了某些内容,需要花费一些精力才能再次实际删除这些提交的更改。这是Git的一个美丽方面。
在您描述的情况下,无论如何都无法推送,因为Git会检测到它们是远程存储库中的更改,这些更改在本地存储库中不可用。您将不得不获取这些更改,然后将它们合并或在远程存储库中提取的更改之前重新定义更改。
为了方便起见,你应该做git pull
。如果可能的话,Git会自动将您的同事变更合并到您的工作副本中。如果您的同事和您自己的更改以更复杂的方式发生冲突,则您必须手动合并更改。但如果你们两个都遵循结构化的Git工作流程,那么这种情况实际上并不常发生。
答案 1 :(得分:3)
假设您已在本地提交代码,您应首先执行:
git pull origin master --rebase
这将从远程获取代码并重新绑定它。完成后,只需将代码推回到远程。
git push origin master
答案 2 :(得分:0)
git pull
使用给定参数运行git fetch
并调用git merge
以将检索到的分支头合并到当前分支中。
先拉。您的贡献不会丢失。这就是版本控制系统的优势。它允许大团队同时在代码团队中工作。
答案 3 :(得分:0)
在我们将更改推送到git-hub中的分支之前,我们需要确保我们的本地存储库具有对git-hub所做的所有更改。正确的下一步是拉。这可以通过以下两种方式之一起作用:
繁体pull
:合并命令将组合远程更改
与我们当地的变化。这将添加一个新的提交,并且
变更清单应该描绘出不同的发展方式
一起回来。
Pull+rebase
:如果我们选中re-base
选项,Hg/Git
将
暂时撤消(“倒回”)来自新本地提交的任何更改,
fast-forward
所以本地分支与遥控器相同
重做(“重播”)本地changes/commits
到新的HEAD
科。这将更改本地提交的时间戳,但是
变更清单应该描述所有变化都是线性发生的。在
无论哪种情况,我们都有可能需要解决冲突
我们碰巧改变了任何重叠的部分
您最近的commits
。