git 命令总结

一、git 基础
  1. /etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用配置。 如果在执行 git config 时带上 --system 选项,那么它就会读写该文件中的配置变量。 (由于它是系统配置文件,因此你需要管理员或超级用户权限来修改它。)

  2. ~/.gitconfig~/.config/git/config 文件:只针对当前用户。 你可以传递 --global 选项让 Git 读写此文件,这会对你系统上 所有 的仓库生效。

  3. 当前使用仓库的 Git 目录中的 config 文件(即 .git/config):针对该仓库。 你可以传递 --local 选项让 Git 强制读写此文件,虽然默认情况下用的就是它。。 (当然,你需要进入某个 Git 仓库中才能让该选项生效。)

    每一个级别会覆盖上一级别的配置,所以 .git/config 的配置变量会覆盖 /etc/gitconfig 中的配置变量。

文件 .gitignore 的格式规范如下:

  • 所有空行或者以 # 开头的行都会被 Git 忽略。
  • 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。
  • 匹配模式可以以(/)开头防止递归。
  • 匹配模式可以以(/)结尾指定目录。
  • 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。
# 忽略所有的 .a 文件
*.a
# 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
!lib.a
# 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO
/TODO
# 忽略任何目录下名为 build 的文件夹
build/
# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf

git三种状态

  • 已修改表示修改了文件,但还没保存到数据库中。
  • 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
  • 已提交表示数据已经安全地保存在本地数据库中。

二、git配置和帮助
#检查配置信息
git config --list
git config <key> #检查具体某配置项
git config --list --show-origin #查看所有的配置以及它们所在的文件
#获取帮助
git help <verb>
git help config #获取配置相关帮助
git add -h #查看 add 选项帮助
git config --global core.editor emacs #使用Emacs作为文本编辑器
git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin" #使用nodepad
git config user.name #查看用户名配置
三、git基础
3.1 git基础命令
#获取git仓库,在本地建立仓库
git init #初始化仓库
git add #添加文件
git clone <url>#获取仓库
git commit -m 'comment for log' #提交仓库,本地保存
#克隆现有的远程仓库
git clone https://github.com/libgit2/libgit2 #克隆url地址的仓库
git clone https://github.com/libgit2/libgit2 mylibgit #克隆远程仓库的时候,自定义本地仓库的名字为mylibgit
#检查当前文件状态
git status
git status -s
#跟踪新文件或将文件放入暂存区
git add <file>
#忽略文件在.gitignore文件
*.a# 忽略所有的 .a 文件
!lib.a# 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
/TODO# 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO
build/# 忽略任何目录下名为 build 的文件夹
doc/*.txt# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/**/*.pdf# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件

#查看已暂存和未暂存的修改
git diff #此命令比较的是工作目录中当前文件和暂存区域快照之间的差异。 也就是修改之后还没有暂存起来的变化内容
git diff --staged#查看已暂存的将要添加到下次提交里的内容
git diff --cached #查看已经暂存起来的变化 --staged 和 --cached 是同义词

#提交更新
git commit
git commit -m "log"#commit 命令后添加 -m 选项,将提交信息与命令放在同一行
git commit -a #把所有已经跟踪过的文件暂存起来一并提交
#移除文件
git rm
git rm -f #删除之前修改过或已经放到暂存区的文件,不建议使用-f,会强制删除该仓库的文件,需要再次远程拉取才能恢复
git rm --cached #从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中
#移动文件
git mv #相当于三条命令,mv ; git rm ;git add;
3.2 查看提交历史
#查看提交历史
git log
git log -p -2#显示每次提交所引入的差异, -2 选项来只显示最近的两次提交
git log --stat#附带一系列的总结性选项
git log --pretty=oneline #使用不同于默认格式的方式展示提交历史。 这个选项有一些内建的子选项供你使用。 oneline 会将每个提交放在一行显示还有 short,full 和 fuller 选项
git log --pretty=format:"%h - %an, %ar : %s" #定制记录的显示格式%H提交的完整哈希值
##############################################
#	%h:提交的简写哈希值
#	%T:树的完整哈希值						
#	#%t:树的简写哈希值
#	%P:父提交的完整哈希值
#	%p:父提交的简写哈希值
#	%an:作者名字
#	%ae:作者的电子邮件地址
#	%ad:作者修订日期(可以用 --date=选项 来定制格式)
#	%ar:作者修订日期,按多久以前的方式显示
#	%cn:提交者的名字
#	%ce:提交者的电子邮件地址
#	%cd:提交日期
#	%cr:提交日期(距今多长时间)
#	%s:提交说明
##############################################
##############################################
# git log 的常用选项
# -p 按补丁格式显示每个提交引入的差异。
# --stat 显示每次提交的文件修改统计信息。
# --shortstat 只显示 --stat 中最后的行数修改添加移除统计。
# --name-only 仅在提交信息后显示已修改的文件清单。
# --name-status 显示新增、修改、删除的文件清单。
# --abbrev-commit 仅显示 SHA-1 校验和所有 40 个字符中的前几个字符。
# --relative-date 使用较短的相对时间而不是完整格式显示日期(比如“2 weeks ago”)。
# --graph 在日志旁以 ASCII 图形显示分支与合并历史。
# --pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline、short、full、fuller 和 format(用来定义自己的格式)。
##############################################
--oneline  --pretty=oneline --abbrev-commit 合用的简写。
git log --pretty=format:"%h %s" --graph #ASCII 字符串来形象地展示你的分支
git log --since=2.weeks #列出最近两周的所有提交
git log -S function_name #接受一个字符串参数,并且只会显示那些添加或删除了该字符串的提交
##############################################
#git log 输出选项
#	-<n>仅显示最近的 n 条提交。
#	--since, --after 仅显示指定时间之后的提交。
#	--until, --before 仅显示指定时间之前的提交。
#	--author 显示作者匹配指定字符串的提交。
#	--committer 仅显示提交者匹配指定字符串的提交。
#	--grep 仅显示提交说明中包含指定字符串的提交。
#	-S 仅显示添加或删除内容匹配指定字符串的提交。
##############################################
3.3 撤销操作
#撤销操作,有些不可逆的
git commit -m 'initial commit'
git add forgotten_file
git commit --amend #最终只会有一个提交——第二次提交将代替第一次提交的结果
git reset #取消暂存的文件 危险的命令,如果加上了 --hard 选项则更是如此 git reset --soft HEAD^  这样就成功撤销了commit。使用git reset --hard HEAD^  这样连add也撤销了。HEAD^ 表示上一个版本,即上一次的commit,几个^代表几次提交,如果回滚两次就是HEAD^^。也可以写成HEAD~1,如果进行两次的commit,想要都撤回,可以使用HEAD~2。
git reset HEAD filename #取消已经add后的文件,让其变回修改状态
git reset HEAD^ #git回退到上一个版本,会丢掉之后版本的修改提交信息,新建的文件不会删掉
git reset --hard HEAD^ #把全部的修改信息都会删掉,如果新建了文件也会一起删掉
git revert -n <commit>#回退某个版本,会将某个版本的修改扔掉,重新建立新的一个版本
git checkout <file> #撤销对文件file的更改,恢复回checkout的状态 一个危险的命令。 你对那个文件在本地的任何修改都会消失 将已修改还原某个修改的文件到未修改状态
git revert -n (版本号) #回退到指定版本,有可能会有冲突问题
git restore a.txt #还原某个修改的文件到未修改状态
git restore --staged a.txt #还原已经修改add后还未提交的版本,修改没有回退,状态回退了
git restore --source=<commit> <file> #还原到特定提交版本,commit为哈希值或引用
3.4 远程仓库
#远程仓库
git remote #列出你指定的每一个远程服务器的简写,默认为origin
git clone https://github.com/schacon/ticgit #克隆远程仓库到本地
git remote -v #显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL
git remote add pb https://github.com/paulboone/ticgit #添加远程仓库,git remote add <shortname> <url> 添加一个新的远程 Git 仓库,同时指定一个方便使用的简写 ,后面可以在命令行中使用字符串 pb 来代替整个 URL
git fetch pb #拉取上面https://github.com/paulboone/ticgit内容
git fetch <remote> #从远程仓库中抓取与拉取, git fetch pb 从上面的的url拉取数据,会访问远程仓库,从中拉取所有你还没有的数据,执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看
git pull #自动抓取后合并该远程分支到当前分支,默认情况下,git clone 命令会自动设置本地 master 分支跟踪克隆的远程仓库的 master 分支(或其它名字的默认分支)。 运行git pull 通常会从最初克隆的服务器上抓取数据并自动尝试合并到当前所在的分支 git push <remote> <branch>
git remote show <remote> #查看某一个远程仓库的更多信息 git remote show origin
git remote rename <old_name> <new_name> #修改一个远程仓库的简写名
git remote remove <remote> #移除一个远程仓库
3.5 标签
#打标签
git tag
git tag -l "v1.8.5*" #只对 1.8.5 系列感兴趣
git tag -a v1.4 -m "my version 1.4" #创建标签
git tag v1.4-lw #轻量标签,git show,不会看到额外的标签信息
git tag -a v1.2 9fceb02 #后期打标签 9fceb02  git log --pretty=oneline显示的校验值
git push origin v1.5 #共享标签,推送标签到共享服务器上
git push origin --tags #把所有不在远程仓库服务器上的标签全部传送到那里
git tag -d v1.4-lw #删除标签,不会从任何远程仓库中移除这个标签
git push origin :refs/tags/v1.4-lw #删除标签后更新远程标签
git push origin --delete <tagname> #直接删除远程标签
git checkout 2.0.0 #直接检出远程标签所指的文件版本
git checkout -b version2 v2.0.0
3.6 git别名
git config --global alias.ci commit #将ci指定为commit别名,要输入 git commit 时,只需要输入 git ci
$ git config --global alias.co checkout #将co指定为checkout别名,要输入 git checkout 时,只需要输入 git co
$ git config --global alias.br branch
$ git config --global alias.st status

4.git分支
#分支创建
git branch testing #创建testing分支,并没有切换到该分支
git log --oneline --decorate #查看各个分支当前所指的对象
git checkout testing #分支切换到testing分支
git checkout -b iss53 #新建一个分支iss53并同时切换到那个分支上,等价于git branch iss53,git checkout iss53;
git checkout master#合并分支,先切换到master分支,然后将iss53分支合并进来
git merge iss53 #将iss53分支合并到当前分支
git branch -d iss53 #删除iss53分支
git branch -D iss53 #强制删除分支
git mergetool #启动一个合适的可视化合并工具,解决冲突
git branch --merged #--no-merged 列表中已经合并或尚未合并到当前分支的分支
4.1分支管理
git branch -v #需要查看每一个分支的最后一次提交
git branch --merged #--no-merged 列表中已经合并或尚未合并到当前分支的分支,删除或者修改分支前查看
4.2远程分支
#<remote>/<branch> 的形式命名 仓库名/分支名
git remote show <remote> #查看某一个远程仓库的更多信息 git remote show origin
git clone -o booyah #默认的远程分支名字将会是 booyah/master,不设置的话位origin/master
git remote add teamone url #添加一个新的远程仓库引用到当前的项目,将这个远程仓库命名为 teamone,将其作为完整 URL 的缩写
git fetch teamone #抓取远程仓库 teamone
git push origin serverfix #推送本地的 serverfix 分支来更新远程仓库上的 serverfix 分支
git push origin serverfix:awesomebranch #将本地的 serverfix 分支推送到远程仓库上的 awesomebranch 分支
git checkout -b serverfix origin/serverfix #本地分支serverfix,并且起点位于 origin/serverfix
git checkout --track origin/serverfix #git checkout -b <branch> <remote>/<branch> 当克隆一个仓库时,它通常会自动地创建一个跟踪 origin/master 的 master 分支 如果想指定其他分区的话就如上面的上一个指令一样,创建<branch>分支跟踪<remote>/breanch
git checkout -b sf origin/serverfix #将本地分支与远程分支设置为不同的名字,本地分支 sf 会自动从 origin/serverfix 拉取
git branch -u origin/serverfix #设置已有的本地分支跟踪一个刚刚拉取下来的远程分支,或者想要修改正在跟踪的上游分支
git branch -vv #查看设置的所有跟踪分支
git fetch --all #拉取所有远程仓库分支
git pull #查找当前分支所跟踪的服务器与分支, 从服务器上抓取数据然后尝试合并入那个远程分支,相当于git fetch 紧接着一个 git merge 命令
git push origin --delete serverfix #删除远程分支serverfix
4.3变基
git checkout experiment
git rebase master#变基,将experiment的基转变为以master分支开始的版本
git checkout master
git merge experiment #合并experment分支到master分支上,和普通合并一样,变基使得提交历史更加整洁

参考资料

Git - 关于版本控制 (git-scm.com)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值