1分知名:
git项目的分支名基本上可以是任意的,给定的默认分支是master。为了支持可拓展性和分类组织,可以创建一些带有层次的分支名,类似于路径名,例如,在修正bug的分支下,对不同的bug建立不同的分支:bug/pr-1023 、bug/pr17等等。
创建分支,git branch <分支名> <提交名>
转换分支 git checkout <分支名>
2合并分支:
git merge <分支名> //合并到当前分支,合并前,当前工作目录必须是干净的。
有冲突的合并:
一个分支的修改与另一个分支上的可能相似或者完全不同,git可以处理这些不同的可能性,通常需要人为的指导。
定位冲突的文件
git status
当出现冲突的时候,应该无一例外使用 git diff 列出冲突:
例如:当前分支的 hello文件内容为:
hellp
worlds
Yay!
被合并的分支的 hello文件内容为:
hellp
world
Yay!
那么合并分支后产生冲突,可以用git diff查看冲突,如图所示
图1.1
---代表源文件,+++代表目标文件;
以空格开头的行代表源文件与目标文件没有差异,以-开头 的行代表在源文件的基础上删除,以+开头代表在源文件基础上添加;
如图1.1 ++表示合并后目录中的文件中相对与合并前的两个文件增加的一行
+<空格> 表示合并后目录中的文件中相对于一个分支所增加的一行
<空格>+ 表示合并后目录中的文件中相对于另一个一个分支所增加的一行
找到冲突的文件,然后修改成合适的内容。
解决冲突后,git add<文件名> 消除冲突,然后提交。
如果由于某些原因,可以在合并提交前停止或者重新启动合并
Git reset –hard HEAD 该命令把工作目录和索引还原到 git merge之前。
也可以在合并提交后放弃合并提交
Git reset –hard ORIG_HEAD
3远程版本库:
默认情况下,克隆的版本库在配置文件中建立一个连接指向它的上游版本库,叫orijin,这是一个单向联系。
config文件内容如下图
图1.2
标注的部分代表你的克隆版本库记录的远程版本库的信息。
url就是pull的地址,而fetch代表了执行git pull的第一步和 git fetch时的默认参数。
Fetch是引用指定(fetch refspec),我理解是描述了从远程版本库的什么地方抓取变更到本地版本库的什么地方。语法是 [+]source:detination
图1.2圈出的fetch部分表达的意思是远程版本库的refs/heads/下的所有(*通配符)的分支映射到本地的克隆版本库的refs/remotes/origin分支中。remotes表示本地版本库上的远程追踪分支 origin表示版本库。如果你需要推送的版本库不止一个,也可以创建其他的远程版本库(所有说明的远程版本库都是相对于本地版本库来说的)
添加一个远程版本库的命令 git remote add <远程版本库名> <地址>
git remote …是操作远程版本库的通用操作(更多指令查阅资料)
图1.3
我们可以使用 git branch -a 查看本地版本库的分支,图1.3中的 alternate bug debugger master都是本地分支,而remotes/开头的表示远程追踪分支。
4从远程版本库推送文件:
git push 也可能遇到问题,当远程分支与你当前分支产生了分叉的情况下。
通常,你会需要合并远程分支的最新提交与你当前的活动分支的最新提交。那么,可以通过git fetch 把远程版本库的最新分支纳入你的版本库,也可以使用git pull。
现在,你的远程追踪分支跟新了,你可以使用git merge <远程追踪分支名> 合并两个提交,产生一个新的提交记录,然后再推送文件。
当你想要添加额外的分支在本地分支上(上文已说明),并且对应到远程版本库中,
git push <远程版本库名> <本地分知名>:<远程版本库中的本地分支名>
删除远程版本库的分支
git push <远程版本库名> --delete <远程版本库中的本地分支名>
也可以
git push <远程版本库名> :<远程分支名>
5从远程版本库拉取文件:
master分支可以被认为是 origin/master 分支引进的开发扩展,同样,你可以在任何远程追踪分支上创建新的分支,用它的扩展开发路线。
使用远程追踪分支名来检出,会在本地分支上创建一个和远程追踪分支名(除去远程版本库名)同名的本地分支,你可以在这个分支上开发提交。
git branch -a 就命令可以查看远程追踪分支和本地分支
git checkout <远程追踪分知名> 创建远程分支对应的本地分支