引言
本篇博客介绍将现有的本地分支以新的分支形式推送到远程库中,和以新的分支的形式从远程库中拉取一个分支。这两个功能都是比较简单的操作,但是在实际开发中,可能会在开发初期有所触及。比如我们希望将远程的dev分支拉取到本地来进行开发,或者将本地的dev分支推到远程库中去等等。
推送本地分支
在EGit中,我们切换到一个已存在的分支,或者新建一个新的分支:
右键项目 ,Team>Switch To>New Branch
此时,我们已经切换到了新建的这个"feature_push_new_branch"分支上
再次右键项目>Team>Push Branch '当前分支名称'...
这里由于项目已经关联了一个远程库,因此Destination选项栏中的信息已经自动创建完毕,而Branch输入框就代表在远程库上显示的分支名称,这里为了区分显示,我特意手动修改了一下远程库中分支的名称(加了一个“GitHub”),点击Preview。
在push确认信息提示框内,我们可以确认我们的push分支信息,可以看到[new branch]的标识,代表是新的分支。点击Push。等待片刻后,就会收到一个提示信息。
最后,检查一下远程库中的分支是否多了一个名为“feature_push_new_branch_GitHub”新分支。
完美!؏؏☝ᖗ乛◡乛ᖘ☝؏؏
拉取远程分支
有推送就有拉取。我们假设已经在远程库存在了dev分支(在上图中我们也可以看到),这个时候我们检查一下本地是否有dev分支:
删除本地分支
在Git Repositories视图中我们可以看到本地全部的仓库信息,找到对应的仓库,Branches>Local
如图可以很清晰的看到,我们的当前分支时feature_push_new_branch上,且已经存在了dev分支(实际上我就是用dev分支练习了将分支push到远程新分支的功能),接下来,我们先删除这个dev分支,然后我们再尝试从GitHub上取下dev分支。
右键需要删除的分支>Delete Branch ,注意当前分支是无法删除的,如果想删除当前分支,请先切换到其他分支上去。
删除结果如下:
可以看到dev分支已经被删除了。另外需要说明一下,如果被删除的分支有一些还没有来得及合并的修改,那么在删除的时候会弹出提示信息,让你再一次确认要删除的分支。
修改checked-out远程分支?!
还是在Git Repositories视图中,我们看到Remote Tracking中有一个名叫origin的远程库(不用怀疑,就是GitHub上对应的项目),它的下面有一个dev分支(如果没有,请尝试F5刷新一下Remote Tracking文件夹)
这里显示的dev分支的缩略信息未必是实时的,我尝试在远程dev分支上添加了一个readme文件,但是在此处刷新是无法显示这个最新操作的,但是通过checkout(分支上右键>Check Out)依然可以拿到最新的提交信息。如下图checkout的结果:
请注意,可以看到我们的当前分支已经从之前的feature_push_new_branch切换到了远程库的dev分支上。
但是如果此刻你直接修改checkout出的代码,是无法被本地Git仓库追踪到的,因为本地并没有对应的分支来追踪这些修改,而且远程库也不会记录你此刻的任何修改,即此刻的操作是无用的。
这点千万要注意,建议小伙伴尝试一下直接修改checkout出的远程分支,看看如果切换回了master分支上,还能不能再重新找回刚才在checkout出的远程分支dev上的任何修改,或者看看远程库上有没有任何变化被记录。
因此,如果希望修改远程的分支,必须修改本地分支然后再push,不可以直接修改checkout出的远程分支。
但是如果你忘记了这点,依然在checkout出的远程分支上做了一些修改并且已经commit了,你切换到了master分支上准备合并这些修改,突然,你发现找不到了这些修改怎么办?不知道小伙伴们是否还记得 git reflog指令?没错,reflog会记录下你的每次提交,所以,你可以去查看一下Git Reflog历史记录:
必须在Git Repositories视图,右键项目 > Show In > Git Reflog
找到你刚刚做的修改的commit,右键 > Checkout ,即检出了刚才的马虎修改:
拉取远程分支
那么如何将远程的分支拉取到本地的一个新的分支上呢?
右键远程分支 > Create Branch...
完成新建分支向导:
点击Finish 结果如下:
可以看到,我们已经将远程的dev分支下载(拉取)到了本地,且已经checkout,目前的工作区就是这个刚刚新建的与远程dev分支相关联的分支了,可以放心大胆的在这个分支上修改提交,Git仓库会一如既往地帮助我们跟踪它的变化。
总结
本章介绍了如何将新分支push到远程库,以及拉取远程的分支(或者可以称为在本地建立一个与远程某个分支相关联的新分支)。
另外还包括了一些其他的小操作,如:删除本地分支,修改了刚刚checkout的远程分支的解决办法。
其实对于普通开发者而言,拉取远程分支的操作可能会用得多一些,推送新分支到远程这个操作可能会影响服务器Git管理的混乱,因此一般都是由项目组长将新的分支push到远程去。
文章描述的过程尽可能详尽,配图尽可能详尽,并不是言简意赅的类型。
喜欢的朋友可以点赞分享,如有疑问,欢迎文末留言。
参考与感谢
《EGit/User Guide》