Git常用命令笔记

    Git配置

命令:
git config

路径:
/etc/gitconfig (全局);
~/.gitconfig ~/.config/git/config(当前用户);
.git/config (特定仓库)

查看当前所有配置信息
git config --list --show-origin

配置用户名和邮箱
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com

配置默认的文本编辑器
git config --global core.editor emacs
git config --global --replace-all core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

    特定词汇

HEAD :指向当前分支的最后一次commit id

help
查看帮助
git help command 查看该命令的帮助信息

add
添加我们需要提交的文件到索引库中,当我们使用git commit时,git将依据索引库中的内容来进行文件的提交
git add 不仅可以提交修改,还能提交添加删除或者新增文件
git add -u []:仅处理tracked文件
git add -i []:查看未提交的修改(包括修改删除 不含新增)
git add--interactive:交互式添加

bisect
用于追溯BUG源头
git bisect start
git bisect bad 标记当前版本有bug
自己切换到上一个TAG,测试正确
git bisect good tagid
这时git提示你测试某个版本
错误的话 输入
git bisect bad
正确的话输入
git bisect good
找到错误的提交后
git bisect reset

blame
文件逐行追溯
git blame file : 查看文件每一行啥谁提交的

branch
管理分支
git branch :查看本地分支信息,并且在当前分支的前面加“*”号标记
git branch -r 列出远程分支
git branch -a 列出本地分支和远程分支
git branch branch_name [] 创建新的分支
git branch -m oldbranch newbranch 重命名分支
git branch -d branchname 删除分支
git branch -d -r branchname 删除远程分支

checkout
检出到工作区、切换或创建分支
git checkout branchName:切换本地分支
git checkout -b branchName:创建并切换到新分支
git checkout -b newBranch [branchname] 更具某个分支,创建并切换到新分支
git checkout [-q] [] [--] 检出某个文件当存在commit时从commit检出 没有则从暂存去检出 暂存区不存在时从HEAD检出
git checkout [-m] [ [-b | -- orphan ] ] [start_point]
git checkout --orphan 新建分支 但丢弃模板分支的所有提交历史
git checkout -p 比较2个分支的差异

cherry-pick
将当前分支的commit提交到其他分支
git cherry-pick 将commit应用到当前分支

clean
git clean 清除工作区未跟踪的文件

clone
克隆版本库
git clone <版本库的网址> [-b branchname ][-d number] [path]会在本地主机生成一个目录,与远程主机的版本库同名

commit
提交修改
git commit 提交暂存区的修改到仓库
git commit -a 提交暂存区和已修改但没添加到暂存区的修改
git commit --amend 取消上次提交并重新提交一次 (会合并上一次提交后的add命令)

describe
通过里程碑直观地显示提交ID
git describe显示当前离当前提交最近的tag

diff
比较差异
git diff 查看当前未暂存的修改
git diff --cached | --staged 查看暂存区的变更内容
git diff HEAD 查看工作区和最后一次提交的差异
git diff 比较2个分支的差异
git diff dev...master 输出自dev和master分别开发以来,master分支上的changed

fetch
获取远程版本库的提交
git fetch <远程主机名> <分支名> 将某个远程主机的更新,全部取回本地
git fetch <远程主机名> <分支名>:newBranch 将远程仓库的分支拉到本地并创建新的分支

init
初始化版本库
git init 初始化仓库

log
显示提交日志
git log [-p 查看每次提交差异] [-数字 查看最近的几次提交]
git log --pretty=format:"%h %s" --graph --name-status

将文件从暂存区取出 撤销add命令
git restore --stage file-path

撤销文件的更改 (从上一次commit还原文件 )
git checkout -- file-path

–dry-run模拟执行并输出结果
git merge --no-commit --no-off branch-name
--no-off:不使用fast-forward

fast-forward方式就是当条件允许的时候,git直接把HEAD指针指向合并分支的头,完成合并。属于“快进方式”,不过这种情况如果删除分支,则会丢失分支信息。因为在这个过程中没有创建commit

rebase
branchA rebase branchB 将branchA的cmoiit(从branchB迁出后新增的commit)追加到branchB的HEAD之后 形成一个新的直线分支 保留所有的commit 不保留分支信息

merge
branchA merge branchB branchA 会新增一个commit 包含branchB上新增的commit

git init
初始化一个空仓库

克隆仓库
git clone URL

查看仓库状态
git status

暂存 (保存的是执行命令的时候文件的状态 之后的修改不生效 暂存本质是提取变更而不是维护文件引用)
git add file-path

.gitignore (需要忽略的文件的规则配置文件)
空行和#开头的会被忽略不解析
规则使用glob模式匹配 已/开头以/结尾
* 表示[0,] 0+个任意字符
[abc] abc中的某个字符
[0-9] 一个数字
? 一个任意字符
** 任意中间目录
!表示强制不忽略
/TODO 忽略TODO文件
build/ 忽略任何目录下的build目录
详细规则: https://github.com/github/gitignore

git rm
删除文件并取消跟踪

取消暂存
git rm --cached file-path

移动/重命名文件
git mv file_from file_to

remote
git remote show origin 查看远程仓库的分支信息
git remote remove origin 删除远程仓库