前言,我对使用git和版本控制系统一般都很陌生。我想我理解了大多数概念,但我似乎遇到了障碍/我使用smartgit作为我的客户端,这可能是相关的,并为游戏服务器编码
几个星期前,我开始了一个重大项目,从我们项目的开发部门开始。在那段时间里,对代码库进行了重大更新,并且一些事情发生了变化,导致我的分支无法编译。显然,它没有使用当前的开发分支作为基础,而是在我开始这个项目时开发分支的状态,而新的变化似乎并没有合并到本地代码中
我刚开始使用smartgit,而且还有很多我不太了解的功能。
我最初分支的基础分支是aurorastation/development
。我想也许应该设置为跟踪分支?
我需要以某种方式将aurorastation/development
的所有更改合并到我的dionaoverhaul
分支中,并创建一个包含所有当前开发代码的分支,并在其上提交dionaoverhaul
提交。而且我不确定该怎么做。
经过一番研究后,我认为我想做的是将我的分支重新定位到极光/发展的顶端
但我看到的一个问题是,至少有一个我正在处理的图块,在此期间已经更改,并且我不想完全覆盖对该文件的更改,以及我的分支中的版本。我不确定在合并我的拉取请求时,存储库管理器是否会处理这些内容,或者是否需要在rebase期间处理它的内容
答案 0 :(得分:0)
您有两个分支:your_local
和development
。
完成your_local
并希望将所有更改带到development
后,您有two options:
development
分支,提取所有更改,并将your_local
合并到其中。development
,提取所有更改,切换回your_local
,将development
合并到其中并解决所有冲突。然后转到选项1。第一个选项是development
中没有重大变化的简单情况。
第二个看起来像你的情况:development
中有变化而且它们与你的冲突。
实际上,还有更多(例如,您可以rebase your_local
加入最新的development
),但现在让我们保持简单。
您无需更改已跟踪的分支,这是a pointer to the remote copy of your local branch。
当development
和your_local
中的更改发生冲突时,git会尝试解决它(这就是git的用途)。但是,并不总是可能,git会将此类文件标记为冲突,并且您必须manually resolve这些冲突。
Smartgit some basic functionality merging并解决冲突。
无论如何,如果您对git / smartgit不是很熟悉,我建议您备份您的存储库,以便您可以尝试合并而不必担心太多。
答案 1 :(得分:0)
"跟踪分支"表示您推送的分支。它应始终与本地分支的名称相同,前缀为" refs / remotes / NAME_OF_REMOTE"。 NAME_OF_REMOTE可以是任何东西,但是如果你只推送到一个服务器,那么惯例就是调用它" origin"。所以不要改变它。如果您这样做,下次推送时,您将收到一条消息,您无法推送,因为它会覆盖远程分支,如果您确定要这样做,请使用{{1} }。如果您使用git push --force
,最终将覆盖其他人在开发分支上的辛勤工作。 (是的,它是可以恢复的,但它很头疼,所以只是不要。)
我需要以某种方式将所有对aurorastation / development的更改合并到我的dionaoverhaul分支中,并创建一个包含所有当前开发代码的分支,并且我的dionaoverhaul会在其上提交
您有2个选项。如果您真的想要所有git push --force
,请执行以下操作:
dionaoverhaul commits ontop of it
另一方面,如果您只想处理最多1组手动冲突,请使用git add -A && git rebase --continue
代替merge
。缺点是你的分支历史将不再是一条直线。然而,这种方法有许多优点,这些优点仅限于此处的范围。要合并,请运行rebase
,而不是运行git rebase origin/development
。同样,您可能必须处理手动冲突,但一旦解决了这些冲突,请使用git merge origin/development
。