我是一名独立开发人员,我刚刚开始使用Git和私有BitBucket存储库.我不清楚的一点是Merge与Rebase.
我经常在台式机和笔记本电脑之间切换,并且一直使用BB来访问任一平台上的最新代码.我在加载最新提交的代码时一直在使用rebase,因为我认为它基本上清除了该平台(桌面或笔记本电脑)上的所有内容,并确保我拥有与BB相同的代码.那是对的吗?我什么时候应该使用merge这样的动作?
任何人都可以帮助避免 git 合并问题。我正在尝试将我的分支合并到另一个分支,比如另一个分支。由于 another_branch 是基础分支。所以要添加在 my_branch 中完成的工作,首先我要合并 my_branch。为此,我正在执行这些步骤。
git checkout another_branch
git pull anothr_branch
一旦我更新了 another_branch 的最新更改,我就会切换到 my_branch
git checkout my_branch
git merge anothr_branch
在做这一切之前,是的,我提交并暂存我的更改以将其保存在本地。所以毫无疑问会丢失我的任何更改。
但我没有看到 another_branch 的所有变化。所以我称之为覆盖。
可能是什么原因?
我重新设置了分支的基础,该分支的效果是在我自己的基础上添加了一些提交。然后意识到我忘记了压缩一些提交,所以很难重新设置并压缩。现在,我需要把那些提交带回来。但是重新调配告诉我当前分支是最新的,即使不是。有没有办法解决这个问题?
编辑:
有两个分支:a和b。两者都是从master分支出来的。两者都是最新的大师。分支a有一些更改。我也希望分支b也有这些更改。我将分支a重新定位到b。最新的提交来自分支a。我的意图是在提交之前压扁这三个提交。我在最近一次提交之前硬重置为。然后我挤了。现在,我想以一种在将分支b合并到master时不会引起头痛的方式找回最新提交。
我已经尝试过reflog,git reset --hard HEAD@{n}但存在相同的问题:当前分支是最新的。
假设我正在开发一个新功能,我已经从'dev'分支分支出来并且我已经工作了好几天,它还没有准备好与'dev'合并并推动.
虽然我做了几次提交,并且已经对dev进行了更改,然后将dev合并到我的功能分支中以保持自己的更新.
这是我的问题.将我的功能分支推送到一个新的分支(与我的本地分支同名)到源(比如GitHub)只是为了备份目的,以及后来当它合并到'dev'和/或'时,这是一个好主意主人'从原产地删除它.
我刚刚开始使用版本控制,我的头在旋转!我试图围绕树枝,结帐,合并和变基础.我相信这些都是愚蠢的问题,但我真的很感激一些帮助.
我的项目是PHP.我正在使用Aptana工作室为我的IDE,Bitbucket和SourceTree用于Git GUI.
所以我想我可能会对这应该如何工作有一个粗略的想法.请告诉我我错在哪里.
说我想添加一个新功能.我有一个主分支.在Aptana中,我可以右键单击文件→ 转到团队,然后创建一个新分支.我可以说出那个分支feature a1bc.我做了我的改变.
完成此功能和所有更改后,我单击Team → Commit,然后Team → Merge branch → master.这会将我的更改合并回主仓库.
这大致是我将如何进行功能添加等?如果随着时间的推移我有100多个功能,我该怎么办?我是否保留所有这些功能分支或在它们合并后删除它们?
假设项目A使用git作为其SCM.我克隆他们的回购做出符合我需要的更改,之后我还能从他们的回购中提取更新并保留我的更改吗?
我试图理解merge和rebase在数学中的集合操作方面做了什么.
在下文中," - "表示diff(类似于数学中的设定差异,但"AB"表示A中的但不表示B中的表示,而B表示不表示A中的表示,而"+"表示patch(即表示不相交联合)数学.我以前没用过patch,所以我不确定).
我正在开发一个目前在svn中跟踪的网站项目,但是一旦其他人有时间设置新的服务器和东西,它将转移到git.这是一个很长的故事,但与此同时,我已经从我的一些代码中创建了自己的git存储库,并对它进行了相当多的工作.我没有使用git svn clone,因为我在海外,我的互联网连接很奇怪,需要HTTP代理,而且似乎没有让git svn通过.在任何情况下,我一直在我自己的git存储库中开发,但最终一旦项目实际上正确导入,我将需要将我的工作重新定义为git-svn克隆的东西.会git rebase为此正常工作吗?
一个复杂的问题是,我实际上是在虚拟机中工作,对于许多提交,我没有意识到我没有设置user.name和user.email配置条目,所以提交来自vm的本地用户,这是一种很奇怪 将所有更改收集到diff文件中然后在创建新分支时将它们应用到新分支上会更好吗?
另一个复杂因素是之前使用的SVN有点半心半意,因此生产服务器上实际上没有提交我未提及的更改.实际上,我首先对代码进行了较旧的修订,甚至不是SVN头,所以我遗漏了一些东西.什么是最好的方法?
最后一个问题是,如果我通过导入SVN存储库git svn(我刚刚检查过它似乎现在正在工作)但是我没有添加一个authors文件,我以后能否将我的更改重新绑定到正确导入的分支上有作者文件?
哦,一个新的复杂功能.我自己导入了SVN存储库git svn,这是一个艰苦的过程,在这个缓慢的连接上花费了两天的大部分时间.然而,在最终完成克隆之后,我意识到在SVN存储库中代码都在子目录中,但在我的git存储库中,存储库的根也是目录的根.如果这有点令人困惑,那基本上就是这样
SVN:
\dir\codez
混帐:
\codez
我如何组合这两个存储库?我希望我仍然可以使用rebase,但这似乎是一个非常奇怪的情况.它听起来类似于子模块,但我认为这不是我需要的.
很抱歉,如果这是一个愚蠢的问题只有一个是/否答案,但如果我理解正确,在git中,一个分支只是一个指向提交的指针.这是不是暗示一旦你合并了两个分支,git就不知道哪一个指向哪一组提交?
之前
A---B---C---D---E <- X
\
1----2----3----4 <- Y
Run Code Online (Sandbox Code Playgroud)
后
A---B---C---D---E--M <-X & Y
\ /
1----2----3----4
Run Code Online (Sandbox Code Playgroud) 我使用git已经有一段时间了,想要使用rebase命令.早些时候我只使用了merge命令.
我对我的功能分支进行了更改,我需要将其与主分支合并.我可以继续通过git merge从主分支运行命令将我的更改合并到我的主分支.但是我可以使用rebase命令将我的分支更改到我的主服务器中吗?从文档中,我了解到rebase将从功能分支完成,以将更改从主服务器合并到我的功能分支.我的理解是正确的还是我需要为我的场景使用git merge命令.