当尚不清楚项目的某项修改对项目可能造成的影响的时候,git的分支管理指令可以让使用者同时进行主线任务的开发和分支任务的修改。
IDEA上的git操作
首先强烈推荐一波IDEA上自带的git操作功能,只要按下ctrl+k,就可以将项目commit到本地暂存区,再按下ctrl+shift+k,就可以将项目推送到remote仓库中去。还可以在右下角方便的进行分支的切换,在右上角可以方便的rollback,返回到刚才修改错误的地方。同时还可以可视化查看分支结构。当然熟练操作的基础是对分支命令基础的掌握啦,那么下面我们开始吧!
分支管理相关指令
git branch:建立新的分支
git checkout:切换工作分支
git merge:合并两个分支
git branch分支的创建、删除与查询
分支创建
git branch [branch_name]:
git branch [branch_name]用于创建新的本地分支,分支名为branch_name。需要注意的是,创建新的分支后不会自动切换到新的分支上,需要使用git checkout [branch_name]切换。
分支删除
-d:
git branch -d [branch_name]用于删除本地名为[branch_name]分支,这个命令会检查该分支在上一次merge后是否进行了修改,存在没有合并的修改会导致删除失败。
-D:
git branch -D [branch_name]也是删除本地名为[branch_name]分支,不同的是该指令会直接删除,不会进行检查。
需要注意的是git branch -d与git branch -D都是删除本地分支的方法,不会影响远程仓库的分支结构。
分支查询
(null):
不带参数的git branch显示当前的分支状态,前面带"*"的分支是当前正在使用的分支。
如果git branch返回为空,那多半是没有进行第一次commit,在第一次commit时会创建master分支,在此之前使用git branch [branch_name]创建新的分支也是不可以的,会出现如下提示:
-v:
git branch -v如下图所示,查看每个分支的最后一次commit记录。
-r:
git branch -r仅查看远程仓库的分支结构。
-a:
git branch -a可以查看所有分支结构,包括本地仓库和远程仓库,其中远程仓库的分支会用红色进行标识。
git checkout分支切换
首先,不同分支的文件对应不同的文件快照,当进行分支切换时所有未合并的文件都会发生变化。
创建分支后新建的文件不共享!
新建的文件不共享!
新建的文件不共享!
实验4中由于最后两个分支不进行合并,创建分支后完善代码就变得比较繁琐,必须在两个分支下来回切换修改程序(当然也是因为创建分支前没有对公共部分进行足够的完善)。实际应用中由于分支大多用于部分功能的修改,最后会进行舍弃或与master分支合并,因而不会存在类似的问题。
git checkout [branch_name]:
git checkout [branch_name] 用于切换到一个名为[branch_name]的分支。
-b:
git checkout -b [branch_name] 用于创建一个新的分支并切换到该分支,分支名为[branch_name]。
git merge分支合并
git merge [branch_name(s)]:
git merge [branch_name(s)] 命令用于将(多个)待合并分支 [branch_name(s)] 与当前正在操作的分支进行合并。合并范围是从这些分支节点的最近公共祖先开始,合并到当前节点为止。
例如,合并前分支结构如图:
在master分支上使用git merge change合并后分支结构如图:
合并过程可能出现冲突!
合并过程可能出现冲突!
合并过程可能出现冲突!
--squash:
删除将待合并分支上的所有commit(s)合并为一个未commit的节点。
例如,合并前分支结构如图:
在master分支上使用git merge --squash change后分支结构如图:
节点P包含了change分支相较于master分支的修改,且是未commit的状态。但不同于普通的merge操作的是,使用--squash参数合并的分支不会记录与change分支的继承关系,一个很明显的两个证明是:合并后使用git log显示commit记录不会包含change分支的信息;此时使用带检查的git branch -d change指令删除change分支会提示存在未合并内容。
在许多情况下使用--squash参数进行合并是更优的选择,因为大量的分支修改中的细节信息是不必要的,使用--squash参数可以保证master分支提交记录足够简洁。
--abort:
git merge --abort用于恢复出现冲突的合并操作,但未commit的操作在某些情况下(如合并过程中发生了修改)可能无法恢复。因此,合并操作前及时commit是一个良好的编程习惯。