Git总结笔记
git相关配置
# 设置你的 Git 用户名 git config --global user.name "<Your-Full-Name>" # 设置你的 Git 邮箱 git config --global user.email "<your-email-address>" # 确保 Git 输出内容带有颜色标记 git config --global color.ui auto # 对比显示原始状态 git config --global merge.conflictstyle diff3 git config --list #配置编辑器 git config --global core.editor "'E:/Sublime Text3/sublime_text.exe' -n -w"
#配置定制化输出
git config --global alias.mylog "log --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%C(yellow)%h %Cblue%cn %Cred%ad %Creset%s'"
创建git仓库
#初始化目录 git init #克隆项目 git clone <远程仓库地址> <本地生成目录名>
查看仓库历史记录
#初始化目录 git init #克隆项目 git clone <远程仓库地址> <本地生成目录名> #查看仓库状态 重点命令 git status #查看日志 git log --oneline 每行显示一个commit --stat 显示统计信息 --graph 用图像展示分支信息 -p 查看具体改动信息 -w 忽略空格变化 <commit_sha> 显示指定的commit信息 ***关于分页器 要向下滚动,按下 j 或 ↓ 一次向下移动一行 d 按照一半的屏幕幅面移动 f 按照整个屏幕幅面移动 要 向上滚动,按上 k 或 ↑ 一次向上移动一行 u 按照一半的屏幕幅面移动 b 按照整个屏幕幅面移动 按下 q 可以退出日志(返回普通的命令提示符)
向仓库中添加commit
- 工作区:就是你在电脑里能看到的目录。
- 暂存区:英文叫stage, 或index。一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
- 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
#添加文件 从工作区添加到暂存区 git add <file1> <file2> … <fileN> #移除文件 从暂存区 git rm --cached <file1> <file2> … <fileN> #提交 暂存区的文件到版本库 git commit -m "<提交说明信息>" ***良好的提交说明 建议 消息篇幅简短(少于 60 个字符) 解释提交的作用(不是如何更改或为何更改!) 禁忌 请勿解释为何做出了这些更改(下文会深入讲解这一点) 请勿解释如何进行了更改(这是 git log -p 的目的!) 请勿使用单词"and" 如果你必须使用 "and",则你的提交说明可能进行了太多的更改,将这些更改拆分为独立的 commit 例如 "make the background color pink and increase the size of the sidebar" #查看已被加入但是尚未提交的更改。 git diff = git log -p #忽略文件,不加入版本控制 修改.gitignore文件 支持通配符 空白行作为空格 # - 将行标记为注释 * - 与 0 个或多个字符匹配 ? - 与 1 个字符匹配 [abc] - 与 a、b 或 c 匹配 ** - 与嵌套目录匹配 - a/**/z 与以下项匹配 a/z a/b/z a/b/c/z
标签、分支、合并
#tag是固定的,分支是随着commit在移动的,HEAD是指向活跃的分支,也就是工作目录看到的分支,切换分支,也就是让 HEAD指向不同的分支 #创建标签 git tag <tagName> -a带注释 -d删除标签 <commit_sha> #列出所有分支 git branch <branch_name>创建分支 -d 删除分支 -D 强制删除 #给分支改名 git branch -m <old_name> <new_name> #切换分支/检出分支 git checkout <branch_name> #在某个分支基础上创建新的分支,并检出 git checkout -b <new_branch_name> <old_branch_name> ###快进合并 如果当前的分支和另一个分支没有内容上的差异,就是说当前分支的每一个提交(commit)都已经存在另一个分支里了,git 就会执行一个“快速向前”(fast forward)操作;git 不创建任何新的提交(commit),只是将当前分支指向合并进来的分支。 #合并分支 git merge <name-of-branch-to-merge-in> #撤销合并 git reset --hard HEAD^ ^属于“相对 commit 引用”并表示“父 级 commit” #查看分支情况,可以看到分支图 git log --oneline --decorate --graph --all #查看合并冲突 git status #合并冲突指示符解释 编辑器具有以下合并冲突指示符: <<<<<<< HEAD 此行下方的所有内容(直到下个指示符)显示了当前分支上的行 ||||||| merged common ancestors 此行下方的所有内容(直到下个指示符)显示了原始行的内容 ======= 表示原始行内容的结束位置,之后的所有行(直到下个指示符)是被合并的当前分支上的行的内容 >>>>>>> heading-update 是要被合并的分支(此例中是 heading-update 分支)上的行结束指示符 #解决合并冲突 git 使用合并冲突指示符来告诉你两个不同分支上的哪些行导致了合并冲突,以及原始行是什么。要解决合并冲突,你需要: 1.选择保留哪些行 2.删掉所有带指示符的行 遇到合并冲突: 1.打开编辑器,搜索合并冲突标记 2.移除带有标记的行 3.找出你要保留的行 4.保存文件、暂存文件、提交 #commit 合并冲突 删掉所有包含合并冲突指示符的行并选择保留哪些代码后,直接保存文件,并将其添加到暂存区,然后 commit!就像普通合并一样,代码编辑器会弹出,并让你提供 commit 消息。和之前一样,我们经常会使用自动生成的合并 commit 消息,因此在编辑器打开后,直接关闭编辑器并使用自动生成的 commit 消息。
撤销更改
#更新最后一个更改 git commit --amend #还原更改 git revert <commit_sha> 此命令将撤消目标 commit 所做出的更改 创建一个新的 commit 来记录这一更改 #重置更改,某个commit不在仓库中,则它所包含的内容也会消失 git reset <commit_sha> --mixed 默认,将撤销的提交更改移到工作目录 --soft 将撤销的提交更改移到暂存区 --hard 将撤销的提交更改直接删除,丢到垃圾桶 #在进行重置分支命令前,最好备份分支 git branch backup 不过git还是会持续跟踪30天,调用则git reflog ###还原会创建一个新的commit,并还原或撤消之前的 commit。但是重置会清除 commit! ### ^表示父commit ~表示第一个父commit 父 commit – 以下内容表示当前 commit 的父 commit HEAD^ HEAD~ HEAD~1 祖父 commit – 以下内容表示当前 commit 的祖父 commit HEAD^^ HEAD~2 曾祖父 commit – 以下内容表示当前 commit 的曾祖父 commit HEAD^^^ HEAD~3 合并 commit 具有两个父级。对于合并 commit,^ 引用用来表示第一个父 commit,而 ^2 表示第二个父 commit