
三分钟教你学Git
介绍Git的点点滴滴,从常用的使用方法到底层的数据组织等。
白杨树
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
三分钟教你学Git(二十九) - 查询删掉的信息历史
有时候我们想知道某一行代码或者是某一段代码是在什么时候删除的,被谁删除的,如果是改动的那么很简单,我们只用 git blame就行了,但是 删除了怎么做呢?git log -S 'deleted_code'src/file.cpp这样git就会找到那个删除了这段代码的commit了,好了,就到这里了。原文:http://blog.youkuaiyun.com/hongchangfirst/article/details/114622425作者:hongchangfirsthongchan...原创 2021-03-10 08:04:06 · 6438 阅读 · 0 评论 -
三分钟教你学Git(二十八) - 修改commit的date参数
有时候你git commit --amend修改了一个commit,但是commit的date日期仍然是当时commit的日期,如果你想要修改为当前日期可以做以下操作:git commit --amend --no-edit --date "$(date)"原文:http://blog.youkuaiyun.com/hongchangfirst/article/details/111307065作者:hongchangfirsthongchangfirst的主页:http://blog.cs..原创 2020-12-17 06:33:03 · 2060 阅读 · 0 评论 -
三分钟教你学Git(二十七) - 修改多个commit
比如我们又一个历史提交A->B->C->D, 当前HEAD在D commit上,我们想要修改B,Ccommits,该怎么做呢?我们知道用git commit --amend可以修改当前的提交D,但是之前的怎么办呢?首先我们要修改的起点开始于最近的三次提交,告诉git:1 git rebase -i HEAD~3然后git会告诉你现在的status:pick a1message of a1pick a2message of a2pick a3message...原创 2020-12-12 07:36:50 · 1477 阅读 · 0 评论 -
三分钟教你学Git(二十六) revert多个提交
假如git commit 链是A -> B -> C -> D 如果想把B,C,D都给revert,除了一个一个revert之外,还可以使用range revertgit revert B^..D 这样就把B,C,D都给revert了,变成:A-> B ->C -> D -> D'-> C' -> B'用法就是:git revert OLDER...原创 2018-07-10 15:28:19 · 25622 阅读 · 0 评论 -
三分钟教你学Git(二十五) 分拣文件
有时候我们需要将某一个commit中的部分改动提取出来,然后放入一个新的commit中,可以怎么做呢?我们举一个简单的例子:假设说commit_1中有5个文件修改分别叫做A, B, C, D, E.情况1:然后想将A文件作为一个单独的commit,剩下的四个文件作为另一个单独的commit,可以这样做:首先将commit_1的改动重新还原到工作区。git reset --m原创 2017-09-06 14:00:21 · 878 阅读 · 0 评论 -
三分钟教你学Git(二十四) error: insufficient permission
有时候我们git pull的时候出现:remote: Counting objects: 15, done.remote: Compressing objects: 100% (9/9), done.remote: Total 9 (delta 6), reused 0 (delta 0)error: insufficient permission for adding an原创 2017-04-18 16:33:34 · 4790 阅读 · 1 评论 -
三分钟教你学Git(二十三) - 左右并列的diff
我们知道可以用git diff来看差异,但是diff展示新添的是用每行的前置+号(绿色的),删除的是用每行的前置-号(红色的)。如果是你rename了一个文件从badName变成goodName,那么它就会展示badName整个文件是红色的,然后goodName整个文件是绿色的。如果我们想让两种diff左右并列,这样我们就能直观的看到两个版本之间的区别,怎么办呢?可以用icdiff原创 2017-04-11 11:26:23 · 4905 阅读 · 1 评论 -
三分钟教你学Git(二十二) - 互动式改写历史
我们之前讲过可以使用merge squash将多个commit合并成一个commit,其实还有另外的思路可以帮你完成任务,那就是互动式rebase。比如,用git rebase -i HEAD^^可以对当前分支的最近两个commit进行改写(注意是开区间,因为git在实现层面需要知道父亲节点)。然后git会将你带入到一个编辑器里,按照历史commit从老到新的顺序从上到下依次列出,每一原创 2017-02-08 11:31:12 · 915 阅读 · 0 评论 -
三分钟教你学Git(二)之命令索引
记住这三个概念,工作区(Working Area),暂存区(Stage),版本库,通过add,工作区的变化到暂存区,通过commit暂存区的变化到本地版本库,通过push本地版本库的变化到远程版本库。下面是常用的命令。 保存进度恢复工作进度#把工作区和暂存区的内容保存到进度列表里git stash save “description”#把工作区和暂存区的所有内容都保存到进...原创 2014-04-29 15:00:41 · 4622 阅读 · 0 评论 -
三分钟教你学Git (一)之模型
Git是版本控制工具,类似于SVN的作用。这里就忽略掉怎么安装之类的,只讲解Git最重要的思维模型。这三个概念一定要清楚:1 工作区(Working Area)2 暂存区(Stage)3 版本库(repository, 本地仓库和远程仓库)工作区很简单,就是你修改代码时会立即体现的地方。暂存区是Git的特色之一,这个概念不好理解,这里举一个例子说明。如我们领到了原创 2014-04-29 14:57:20 · 4311 阅读 · 0 评论 -
三分钟教你学Git (三)之技巧
先来看看几个比较有用的技巧git stash将工作区中的状态保存到栈中,供以后apply/pop。可以把它理解为一个commit,但是是存在另一个仓库里的。git stash save -u 'something'原创 2014-05-04 09:58:30 · 2100 阅读 · 0 评论 -
三分钟教你学Git (四)之紧急救助
如果你不小心git reset --hard HEAD^然后这个commit又没有在别的git仓库中,怎么办?是不是这次修改就丢了呢?git为我们每次都历史都保留了reference log如下:$ git commit -A -m "hongchangfirst commit"你现在看git的历史记录,你可以看到两次提交:$ git log* d1f3fg原创 2014-06-21 16:29:48 · 2684 阅读 · 0 评论 -
三分钟教你学Git (五)之 查询历史
我们知道查询历史是git log如果想要piaoliagit log --graph --decorate原创 2015-02-13 17:43:34 · 1810 阅读 · 0 评论 -
三分钟教你学Git(六) 之 解决冲突
zhc.c如果有冲突,查看是什么冲突。# git checkout --conflict=diff3 zhc.c原创 2016-10-12 12:38:46 · 1752 阅读 · 0 评论 -
三分钟教你学Git (七) 之 跨平台协作
最常见的就是Linux和Win换行符的不同,在Linux下换行符是\n,但在Win下换行符是\r\n。也就是说所有的Linux下的文件如果直接拷贝到Win上,则所有的行都变成了一行;Win下的文件到Linux下就变成了每一行后边都有一个^M。Git将此考虑在内,有一个选项可以在Git检出代码库上的代码时,如果是在WIn上,那么自动将\n变成\r\n。然后在提交代码时,在将\r\n转换成原创 2015-04-09 17:17:49 · 2280 阅读 · 2 评论 -
三分钟教你学Git(八) 之 删除分支
有时候开发了很多的特性,开了很多的分支,时间长了分支就多了,想要把不用的分支删除,怎么办呢?#查看本地都有哪些分支git branch#查看所有的分支,包括远程的git branch -a#删除本地的某个分支git branch -D hongchangfirst#删除远程的分支git branch -r -d origin/hongchan原创 2015-05-04 18:03:45 · 39710 阅读 · 0 评论 -
三分钟教你学Git (九) 之 新建分支错误
zhc@hongchangfirst$ git checkout -b hongchangfirst origin/hongchangfirst出现:fatal: Cannot update paths and switch to branch 'hongchangfirst' at the same time.Did you intend to checkout 'hongcha原创 2015-05-04 18:06:56 · 10677 阅读 · 1 评论 -
三分钟教你学Git (十) 之 bad object HEAD错误
有时候进入到Git仓库执行命令:git status显示:fatal: bad object HEAD直接:git pull origin hongchangfirst将远程分支的内容重新sync下来即可。原创 2015-05-04 18:09:49 · 28974 阅读 · 3 评论 -
三分钟教你学Git (十一) 之 集合运算
1 差集有时候使用Git的时候我们想对比两个branch有哪些不同,比如发code review的时候,如果能有一个命令可以给我们展示两个branch的不同,即差集,那将会很方便。Git有double dot语法可以做这个事情:git log master..hongchangfirst_branch它会将所有在hongchangfirst_branch分支里而不在原创 2015-05-15 16:18:15 · 4009 阅读 · 0 评论 -
三分钟教你学Git(十二) 之 fast-forward
什么是fast forward, 顾名思义,就是快速向前进,Git怎么做到快速的呢?原来如果Git判定可以fast forward的时候,直接修改当前HEAD指针的指向然后再修改当前HEAD指针,说白了就是修改两个指针的指向,而并没有生成新的commit对象。所以当你修改了其中的一个branch的时候,另一个branch也会出现变化,因为引用的是同一个commit对象。原创 2015-06-08 16:17:09 · 25591 阅读 · 1 评论 -
三分钟教你学Git(十三) - 二分查找
比如说你收到了错误报告,然后你知道前几天明明是好的,但是这几天有好多新的commit被部署了,那么我们怎么迅速的找到第一个引入Bug的commit呢?我们可以使用git bisect,git利用二分查找法迅速找到第一个坏的commit,下边看看具体怎么用就明白了。我们首先告诉git我们要开始binary search了。# git bisect start然后我们告原创 2015-06-08 16:17:47 · 3482 阅读 · 0 评论 -
三分钟教你学Git(十四) 之 线下传输仓库
有时候另一个人不能从远程直接clone仓库或者说因为很大,clone很慢或其它原因,我们可以使用bundle命令将Git仓库打包,然后通过U盘或者是其它介质拷贝给他,这样他拿到打包好的仓库后可以unbundle成仓库,达到了共享的目的,这样有时候是很方便的。我们看看具体怎么做:首先我们进入仓库,git status一下看看当前的仓库状态。然后开始打包:git bun原创 2015-06-08 16:23:36 · 5456 阅读 · 0 评论 -
三分钟教你学Git(十五) - 搜索
1. 空间维度搜索,我们发现经常有需求是想找到某个函数在哪些文件里出现过。git grep在当前working directory下搜索含有某个字符串的文件,要显示行号可以使用-n参数。# git grep -n hongchangzhc.conf:1:hongchangfirst只显示包含的文件和其包含的个数可以使用--count参数。# git gr原创 2015-06-12 12:49:31 · 3554 阅读 · 0 评论 -
三分钟教你学Git(十六) - 统计
有时候想统计仓库的情况,比如代码量,贡献者之类的。1 统计某人的commit数量git log --author="$(git config --get user.name)" --oneline | wc -l2 统计某人的代码量git log --author="$(git config --get user.name)" --pretty=tformat: -原创 2015-07-02 16:16:24 · 5340 阅读 · 0 评论 -
三分钟教你学Git(十七) - 钩子
Git可以定制一些钩子,这些钩子可以在特定的情况下被执行,分为Client端的钩子和Server端的钩子。Client端钩子被operation触发,比如commit,merge等,Server端钩子被网络动作触发,比如pushed commits。那么钩子是放在哪的呢?在.git/hooks/文件夹下。当你init一个仓库的时候,下边会有一些钩子的例子,以.sample结尾。原创 2015-07-02 16:20:16 · 19653 阅读 · 0 评论 -
三分钟教你学Git(十八) - 重写历史
git filter-branch 允许你使用一个单一命令来大范围地更改历史。所以这个命令要慎用。1假如你想对所有的commits删除一个文件。git filter-branch --tree-filter 'rm to_be_deleted_file' HEAD2 假如你想删除某些message中的某些以cr开头的行。git filter-branch --m原创 2015-07-15 15:56:28 · 2055 阅读 · 0 评论 -
三分钟教你学Git(十九) - 全局,用户,仓库作用域的配置文件
Git的配置文件存储在三个地方,分别可以作为全局的作用域,用户级别的作用域和仓库级别的作用域。这些变量分别存储在三个不同的位置:1 全局作用域的config文件。/etc/gitconfig 文件:包含了适用于系统所有用户和所有库的值。如果你传递参数选项’--system’ 给 git config,它将明确的读和写这个文件。如:git config --system core原创 2015-09-28 11:17:10 · 3780 阅读 · 0 评论 -
三分钟教你学Git(二十) - revert merge会出现的问题
比如当我们git revert的时候,git revert Git会抱怨:is a merge but no -m option was given这是因为你revert的那个commit是一个merge commit,它有两个parent, Git不知道base是选哪个parent,就没法diff,所以就抱怨了,所以你要显示告诉Git用哪一个parent。原创 2016-03-10 23:27:26 · 22165 阅读 · 2 评论 -
三分钟教你学Git(二十一) - 复制连续多个提交
有时候我们有一个分支A,里边包含了提交A1->A2->A3->A4->A5等。然后我们又有一个分支B,里边包含了提交A1->A2->B1->B2->B3,现在我们想把分支A中的A3,A4,A5版本复制到分支B上,我们应该怎么办呢?我们可以使用cherry-pick 三次,分别将A3,A4,A5复制到B上,但是如果我们需要cherry-pick的提交数量达到10个以上怎么办呢?其实che原创 2016-10-09 15:38:00 · 2349 阅读 · 0 评论