1忽略某些文件
- 起因
- 项目中经常会生成一些GIt系统不需要追踪的文件。
- 开发中你会发现项目中到处都有未追踪的文件。git add 和 git commit -a变得不实用
- 解决方案
- 再顶层工作目录中添加一个.gitignore的文件,来告诉Git系统要忽略哪些文件。
- .gitignore可以共享,项目开发者也能共享一个忽略文件规则
- 对特定的仓库起作用: .git/info/exclude和git配置变量core.excludesfile中指定的文件里
2REBASE
2-1REBASE基本用法
git checkout -b mywork origin
#你对本地分支做了修改,他人对origin分支修改; 产生了“分叉”
- 使用pull命令把origin分支上的修改拉下来合并,看起来像一个新的合并提交
或者 使用git rebase命令,看起来更像一个没有合并的分支
- 把mywork的每个提交取消掉,并保存为临时补丁,在.git/rebase目录中
- 把mywork分支更新到最新的origin分支
- 应用上面保存的补丁到mywork上
gitrebase发生冲突时,解决冲突
- 解决冲突
- 用git-add命令更新这些命令
- 执行
git rebase --continue
继续应用余下的补丁
2-2交互式rebase
关键词:交互式
向别处推送提交之前对他们进行重写。
对推送之前的提交进行分割、合并或者重排序
git rebase -i origin/master
#查看被rebase的提交
git log github/master..
假如从上一次推送起有5个提交
- 交互式添加:提供友好界面去操作git索引
- 交互式的操作,按照提示进行操作。
储藏
- 情形:开发中遇到和当前工作不相关bug需要停止当前工作
- 解决方式:使用git stash保存当前的工作状态, 修复完bug之后执行’unstash’操作回到之前的工作状态
流程:
git stash "work in progress for foo features"
##1. 将你的本地修改储存,然后重置工作目录和索引,恢复到分支上次提交时的状态
...edit and test...
##2. 修复bug
git commit -a -m "blorpl:typofix"
##3. 修复完bug之后,使用git stash apply恢复以前的工作状态
git stash apply
储藏队列
- git stash list命令查看你保存的储藏stashes
每执行一次储藏,就添加到stash队列中 - git stash clear:清空这个队列
- git stash apply stash@{l}:使用在队列中的任意一个储藏
GIT树名
用名字表示方法:替代SHA串表示一个提交或是其它git对象
- sha短名
- 只要前缀不重复,一个提交的sha名就不会和其它名字冲突
- 分支,remote或标签
- 使用分支,remote或标签名来替代SHA串名
- 日期标识符
- 用日期标注版本
- 顺序标识符
- 表示某点前面第N个提交;master@{5}表示master前面第5个提交
- 多个父对象
- 告诉你某提交的第N个直接父提交; master由a,b合并而成;master^2表示分支b
- 波浪号
- 表示一个提交对象的第N级祖父节点
- 树对象指针
- master^{tree}
- 二进制标识符
- master:/path/to/file得到某对象blob的sha串名
- 区间
- ..表示
追踪分支
用来联系本地分支和远程分支。
使用情形:
经常从远程仓库里拉取分支到本地,但不想用gitpull这种格式
- git clone自动在本地建立一个’master’分支
- 在使用git branch的时候加上’–track’参数
git branch --track experimental origin/experimental
- 运行git pull experimental
- 从origin抓取内容,把远程的origin/experimental分支合并进本地的experi分支
使用GIT GREP进行搜索
- 不用签出历史文件就能查找它们
git grep thingsforgrep
- 参数 -n, –name-only, -c
- -e 组合搜索条件
GIT的撤消操作-重置,签出和撤销
用于修复错误
- 修复未提交文件中的错误(重置)
git reset --hard HEAD
命令会清空所有未提交的内容git checkout -- hello.rb
恢复’hello.rb’
- 修复已提交文件中的错误
- 马上后悔了
- 创建一个新的提交去撤销老提交所有的的修改
- 修改老提交
- 马上后悔了
- 创建新提交来修复错误
git revert HEAD
创建了一个撤销了上次提交的新提交git revert HEAD^
:撤销了上次提交的上次提交git commit
把用于撤销的提交真正的提交
- 修改提交来修改错误
git commit --amend
维护GIT
git靠压缩历史信息来节约磁盘和内存空间
git gc
:比较耗时
- 保持可靠性
git fsck进行仓库的一致性检查
建立一个公共仓库
git clone --bare ~/proj proj.git
touch proj.git/git-daemon-export-ok
- 在~/proj目录创建一个proj.git目录,这个目录里有一个”裸git仓库”
- 把pro.git目录拷贝到用来托管公共仓库的主机上
- 通过git协议或http协议导出git仓库
建立一个私有仓库
- 通过ssh协议来访问仓库
git clone --bare /home/user/myrepo/.git /tmp/myrepo.git
scp -r /tmp/myrepo.git myserver.com:/opt/git/myrepo.git