一.分支
分支可以使多人开发时开发进程各不影响。
1.分支的创建
$ git branch (分支名)
此时当前分支仍然在master上,切换到新分支需要执行命令:
$ git checkout (分支名)
2.分支的合并
在分支执行完动作后需要将分支内容并回主分支。命令行git merge(文件名)。
分支冲突时,单用merge无法正常合并,此时我们可以先git status查看unmerged的文件,这些有分割线进行分割。此处摘录部分教程。
-
手动合并
选择要保留的代码,然后再把>>>>>, ======, <<<<<<这些提示行给去掉。最后重新进行add commit的操作即可。
-
放弃合并
当我们发现冲突所导致的改动量很大时,我们可以选择放弃该次的合并。我们可以使用
git merge --abort
放弃此次的融合。如果我们在运行了git merge之后又进行了一些人为的改动,那么在abort之后,所进行的改动也会被回滚掉。 -
mergetool
git官方开发了一个专门用来合并的工具,叫做git mergetool(下图所示),它会将找到一份两个分支的祖先代码作为base(基准),然后再将两个分支的改动都列举出来作为对比,让我们在git编辑器当中决定要留下什么。
3.分支推送到远程
可使用git remote -v
查看远程库的详细信息。推送时使用命令行git push origin (分支名)。
4.分支的删除
- 删除本地分支:
git branch -d (分支名)
- 删除远程分支
git push origin --delete (分支名)
5.分支的重命名
git branch -m oldBranchName newBranchName
二.工具
1.引用修订版本
1.引用 Commit 的记录
SHA-1哈希值可以通过git log | more后commit的信息来确定。
git show (SHA-1值)可以查看某次提交信息。当然可以只写前6位甚至4位,以求简略。简略值可以通过git log --abbrev -commit来查看。
2.引用分支
如果你要查看一个分支的最后一次对象,可以通过分支名查看。查看本地分支列表通过git branch
查看。显示结果中*表示当前工作的分支。查看远程分支后加-r。
然后git show (分支名)即可查看。
3.引用日历
命令行git reflog。
每当你的 HEAD 所指向的位置发生了变化,Git 就会将这个信息存储到引用日志这个历史记录里。 你也可以通过 reflog 数据来获取之前的提交历史。 如果你想查看仓库中 HEAD 在 2 次前的所指向的提交,你可以使用 @{n} 来引用 reflog 中输出的提交记录。
2.交互式暂存
运行 git add
后加 -i
或者 --interactive
选项的时候,Git 会进入一个交互式命令模式。
之后,在 Waht now>>
提示符后输入u
或者2
,它会提示你要暂存哪个文件。然后输入u后显示的要存文件的序号,回车即可。
如果想要查看已暂存内容的区别,可以使用 d 或 6(区别)命令。 它会显示暂存文件的一个列表,可以从中选择想要查看的暂存区别。
暂存补丁需要输入p或者5。通过y
或n
选择是否要暂存每一区块,或通过a
暂存从这到后面所有当前文件的修改。
3.贮藏与清理
命令行git stash。修改后暂时不想提交,但想切换分支时使用它,将变更先推入栈。
git stash list可查看stash列表。
切换至最后 stash 变更,直接执行 git stash apply
即可,当然如果有多个,可以通过 git stash apply stash@{n}
中的 n 来获取指定的的变更。
而对于清理可以使用git clean(会移除未跟踪文件)。
-f -d移除工作目录中所有未追踪的文件以及空的子目录,(-f强制删除,-d清理目录)-n可进行查看。-n -x可以移除掉忽略文件的内容。交互删除-i。
4.搜索
默认情况下git grep
会查找你的工作目录文件。git grep (目录名)。
通过-n
或者--line-number
显示匹配的行号。
通过-c
或者--count
输出统计信息。
通过-p
或者 --show-function
显示每个匹配字符串所在的方法或函数。
对于目录,git log后加-s可知道新增的提交删除内容,-L选项进行行日志搜索,它可以展示代码中一行或者一个函数的历史。
5.子模块
添加子模块git submodule add
可以通过git diff看到详细信息,更漂亮的差异输出可以加--submodule.
初始化本地配置文件git submodule init
从该项目中抓取所有数据并检出父项目中列出的合适的提交git submodule update
更新子模块可以使用git submodule update --remote
6 打包
命令行git bundle。详细情况见教程。