《Git从入门到精通_高见龙》的笔记

目录

第5章 开始使用Git

第6章 使用分支

第7章 修改历史记录

第8章 标签

第9章 其他常见的情况及一些冷知识


第5章 开始使用Git

cd xxx 切换至哪个目录
mkdir xxx 创建一个名为xxx的目录(文件夹)

git init

初始化当前目录,让Git对当前目录进行版控

git status

查看当前状态
echo "hello, git" > welcome.html 创建一个文件,并将一个内容写入文件中
git add welcome.html 将这个文件加入暂存区,让Git开始追踪它
git add *.html 将所有未跟踪的html文件加入暂存区
git add --all 将所有文件加入暂存区
git add . 与--all参数的区别:1.Git的版本;2.执行命令所在的目录
git commit -m "init commit" 将暂存区的内容提交到存储库中存档
git commit --allow-empty -m "空的" 这样子没有内容也可以提交
git commit -a -m "update content" 没有提前add,也可以提交,只对已经存在于存储库中的文件有效,对于untracked file无效
touch index.html 创建文件
git log 查看历史记录(commit的记录)
git log --oneline --graph 输出的结果更加精简,一次性看到更多的commit
git log --oneline --auther="Sherly" 查找作者名为Sherly的commit
git log --oneline --auther="Sherly\|Eddie" 查找这两个人的commit,注意使用“\”
git log --oneline --grep="LOL" commit信息中搜索符合关键字的内容
git log -S "Ruby"  所有的commit的文件中进行搜索
git log --oneline --since="9am" --until="12am" --after="2017-01" 根据时间查找commit
rm welcome.html 删除文件
git rm welcome.html 请Git帮忙删除,这样不用再add
git rm welcome.html --cached

不删除文件,只是让它不再受Git控制

mv hello.html world.html 直接改名
git mv hello.html world.html 请Git帮忙改名
git commit --amend -m "xxx" 改动最后一次commit的信息

git add xxx.html

git commit --amend --no-edit

把文件并入最后一次commit,其中--no-edit参数表示不要编辑commit的信息

touch images/.keep

.keep文件是空的,目的是为了让Git可以感应到images目录的存在(空的目录无法被提交)
touch .gitignore 创建并编辑文件的内容,即可忽略文件(只对规则设置后存入的文件有效)
git add -f 文件名称 可以无视.gitignore中的规则
git clean -fx 清除那些已经被忽略的文件(f表示强制)
git log welcome.html 查看单一文件的commit记录
git log -p welcome.html 查看这个文件每次commit做了哪些改动
git blame index.html 可以看到哪一行代码是谁在什么时候写的
git blame -L 5, 10 index.html 只显示文件中指定的行
git checkout xxx.html 恢复刚刚被删除但还没有被add的文件(原理是从暂存区中恢复)
git checkout . 恢复所有被删除的文件(还没有add)
git checkout HEAD~2 welcome.html 用2个版本以上的那个文件来覆盖当前工作区的这个
git reset e12d8ef^ 表示拆掉e12d8ef这一个commit(前往e12d8ef的前一个commit)等价于git reset HEAD^(^表示前一个),也可以直接写git reset [SHA-1]
git reset HEAD~2 --hard/--mixed/--soft reset指令的三种模式
git reflog 也是一个查看记录的命令
git branch 查看当前所在的分支
git add -p index.html Git会询问是否要把整个区域加到暂存区,y是整个加入,e是部分加入(会有编辑器)

第6章 使用分支

git branch 分支名称 新增分支
git branch -m 旧名 新名 重命名分支
git branch -d 分支名称 删除分支
git branch -D 分支名称 强制删除还没有合并的分支
git checkout 分支名称 切换分支
git checkout -b 分支名称 分支存在则会切换;分支不存在Git会创建后切换
git merge 分支名称 用当前所在分支合并分支名
git merge 分支名称 --no-ff 不适用快转(Fast-Forward)模式合并
git branch 分支名称 [SHA-1] 创建一个分支,指向[SHA-1]这个commit
git rebase 分支名称 作为新的参考基准
git reset ORIG_HEAD --hard 回到“危险操作”之前HEAD的位置

第7章 修改历史记录

git rebase -i [SHA-1]

可用于批量修改commit信息(-i表示进入rebase指令的互动模式;[SHA-1]表示从现在到[SHA-1]这个commit)

进入vim后:pick改为reword

git reset ORIG_HEAD --hard 取消这次的rebase
git rebase -i [SHA-1]

可用于批量合并分支

进入vim后:pick改为squash(一直会合并到最近的那个pick)

git rebase -i [SHA-1]

可用于将1个commit拆分成多个commit

进入vim后:pick改为edit

git rebase --continue

因为现在还处于rebase状态,所以要让rebase继续执行
git rebase -i [SHA-1]

可用于在commit之间增加新的commit

进入vim后:pick改为edit

git rebase -i [SHA-1]

可用于调整commit的顺序

进入vim后直接修改顺序

git rebase -i [SHA-1]

可用于删除commit

进入vim后直接删除

git revert HEAD --no-edit

取消不要的(最后一个)commit,且不编辑commit信息

新做一个commit来取消不要的commit

第8章 标签

git tag 标签名 [SHA-1]

为[SHA-1]这个commit加上名为xxx的轻量标签;若没有给出[SHA-1],则默认加在当前所在的commit上

git tag 标签名 [SHA-1] -a -m "xxxxx" -a表示创建有附注的标签
git show 标签名

查看标签所指向的那个commit的信息(有附注的标签会比轻量标签多显示信息)

git tag -d 标签名 删除标签

第9章 其他常见的情况及一些冷知识

git add --all

git commit -m "not finish yet"

git reset HEAD^

手边的工作做到一半,要切换到别的任务(方法一)
git stash

手边的工作做到一半,要切换到别的任务(方法二)

先把修改都存起来

git stash list

查看当前的stash列表
git stash pop stash名

pop指令:把某个stash拿出来并套用在当前的分支上;套用成功后这个stash就会被删除

(没有指定stash名则默认从编号小的开始)

git stash drop stash名 将stash从列表中删除
git stash apply stash名 apply指令:指定stash套用,成功后stash不会被删除
git filter-branch --tree-filter "rm -f config/database.yml" 不小心把账号密码放在Git中了,想把它删掉
git cherry-pick [SHA-1]

将指定的commit捡过来街道当前的分支上

(类似复制过来,指定的commit还在原来的位置)

git cherry-pick [SHA-1] [SHA-1] [SHA-1] 一次捡多个commit
git cherry-pick [SHA-1] --no-commit 捡过来但是先不合并,而是先放在暂存区

1.git filter-branch -f --tree-filter "rm -f config/database.yml"

2.rm .git/refs/original/refs/heads/master

3.git reflog expire --all --expire=now

4.git fsck --unreachable

5.git gc --prune=now

(6.git push -f)(若已经被push出去)

1.-f表示强制覆写filter-branch的备份点

2.这个文件对刚刚做的filter-branch(备份点)念念不忘,所以要将它删除

3.reflog也念念不舍,所以也要删除(要求reflog立刻过期,默认为30天)

4.查看unreachable对象

5.启动资源回收机制

你可能感兴趣的:(git)