《Pro Git》 读书笔记
起步
Git 有三种状态
- 已提交 committed
- 已修改 modified
- 已暂存 staged
初次运行 Git 前的配置
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
获取帮助
git help <指令>
git help merge
Git 基础
获取 Git 仓库
# 在现有目录中初始化仓库
git init # 这将创建一个名为.git的子目录,此目录中含有初始化Git仓库的所有文件
git add *.c # 跟踪指定文件
git commit -m "init repo" # 提交
# 克隆现有仓库
git clone https://github.com/libgit2/libgit2
git clone https://github.com/libgit2/libgit2 mylibgit # 指定文件夹的名称
记录每次更新到仓库
工作目录下的每一个文件只有两种状态:
- 已跟踪 (指的那些呗纳入了版本控制的文件)
- 未跟踪
新添加的文件,一般是untracked,这时候要使用git add <文件名>
去跟踪文件
git add 的作用
- 开始跟踪新文件
- 把已跟踪文件放到暂存区
- 合并时把有冲突的文件标记为已解决的状态
Git 只会暂存你最后一次运行git add
时的版本
查看状态
git status
git status -s # 更紧凑的格式输出状态
忽略文件
touch .gitignore # 添加
示例:
# no .a files
*.a
# but do track lib.a, even though you're ignoring .a files above
!lib.a
# only ignore the TODO file in the current directory, not subdir/TODO
/TODO
# ignore all files in the build/ directory
build/
# ignore doc/notes.txt, but not doc/server/arch.txt
doc/*.txt
# ignore all .pdf files in the doc/ directory
doc/**/*.pdf
查看已暂存和未暂存的修改
git diff # 比较的是工作区和暂存区快照之间的差异,也就是修改后没有暂存起来的变化内容
git difftool # 使用图形化界面来查看差异
提交更新
git commit
之前最后再进行一次git add
,确保还有什么修改过的文件或新增的文件还没被暂存
git commit # 这样会打开一个文本编辑器,让你输入提交信息
git commit -m "commit msg" # 直接提交
也可以使用
git commit -a -m "commit msg"
这样加一个-a
,Git 就会子哦对那个把所有已经跟踪过的文件(意味着如果未跟踪过的将不会暂存)暂存起来,一并提交
移除文件
这个命令是把文件移除然后提交到暂存区,如果单纯的删除的话还得手动git add
提交到暂存区
git rm <文件名>
git rm --cached <文件名> # 将文件在暂存区删除,然后让这个文件变成untrack状态,这时这个文件还在
移动文件
移动文件并提交到暂存区
git mv <文件名> <新的文件名>
查看提交历史
git log
git log -p -2 # 查看最近两次提交的内容差异
git log --stat # 查看每次提交的简略的统计信息
git log --online # 一行显示简要信息
git log --pretty=oneline # 可以指定格式去展示提交历史
git log --pretty=format:'%h -%an, %ar : %s'
git log --pretty=format:'%h %s' --graph # 配合graph使用
撤销操作
如果你commit之后发现还有要修改的地方,那么你就可以使用下面这条命令:
git commit -m "init repo"
git add <忘记要修改的文件>
git commit --amend
最终你第二次提交会代替你第一次提交,也就是最终只有一条提交
撤销对文件的修改
# 先是要取消暂存,让它回到工作区
git reset HEAD <filename> # 第一种方法
git restore --staged <filename> # 第二种方法
# 撤销对文件的修改
git checkout -- <filename> # 第一种方法
git restore <filename> # 第二种方法
远程仓库的使用
查看远程仓库
git remote
git remote -v # 显示详细信息
可以发现 origin 是 git clone 时的服务器默认的名字
添加远程仓库
git remote add <remote-name> <url>
从远程仓库中抓取与拉取
git fetch <shortname> # git fetch会将数据拉取到你本地仓库,并不会自动合并或修改你当前的工作,你必须要手动git merge
git pull # 这个命令其实包含着git fetch,而且还会尝试合并远程分支到当前分支
推送到远程分支
git push <remote-name> <branch-name>
git push origin master
查看远程仓库
git remote show <remote-name>
git remote show origin
远程仓库的移除和重命名
git remote rename <remote-name> <new-remote-name> # 重命名
git remote rm <remote-name> # 移除
打标签
列出标签
git tag # 会列出所有标签
创建标签
Git 中分为两种标签
- 轻量标签:特定提交的一个引用
- 附注标签:存储在Git中的一个完整对象
创建附注标签:
git tag -a v0.1 -m "chicken you are beautiful"
git tag -a v0.05 -m "hungry" a6da524 # 后面加上版本号可以对某一个commit打上版本号
查看某个标签的详细信息:
git show v0.1
共享标签(push到远程服务器)
git push origin v0.05 # push一个
git push origin --tags # push全部
检出标签
git checkout -b version005 v0.05 # 创建一个新分支,这个分支的内容和我的指定的版本号的内容是一致的
评论