git 中的概念
工作区
暂存区
分支
git 中 HEAD 指向分支, 来确定当前要提交到哪一条分支上, 分支指向提交点, 来确定提交到哪里.
ssh 连接 github
ssh-keygen -t rsa -C "youremail@example.com"
生成公钥与私钥, 将公钥添加到 github 中
git config --global user.name "name"
git config --global user.email "email"
初始化 git 仓库
git init
添加文件到暂存区中
git add
一次可添加多个 文件到暂存区中, 如 git add file.txt another.txt
-A / --all / --no-ignore-removal 将工作区中所有的文件添加到暂存区
-n 试运行, 但不真正执行命令
提交文件到分支上
使用 -m 可以添加提交时的信息, 如 git commit -m <msg>
git commit -- <pathspec>... 可以指定文件进行提交
git status 查看仓库的状态
git diff 查看工作区与暂存区的不同处
git diff <commit> -- <path>... 比较的是分支与工作区中的差异
git diff --cached 比较的是暂存区与分支中的差异
git log 查看到当前版本的日志
git log --preety=oneline 如果要将每次提交的信息显示为一行
git log --graph 用图表的形式显示日志
git log --abbrev-commit 提交的版本号缩短
git rm <path> 删除文件并把删除操作提交到暂存区
git rm --cached <path> 取消对文件的追踪
回退版本
回退到上一个版本使用 git reset --hard HEAD^
回退到上上个版本使用 git reset --hard HEAD^^
回退100个版本使用 git reset --hard HEAD~100
回退到指定版本 git reset --hard 版本号
将暂存区中的文件改为分支上的文件 git reset HEAD <pathspec>
查看操作日志
git reflog
checkout 指令
git checkout -- <pathspec> 将工作区的文件恢复到暂存区中文件
git checkout -b <branch> 创建并切换分支
git checkout <branch> 切换分支
将本地仓库的内容推送到 github 上
git remote add origin git@github.com:MICOOON/learngit.git
git push -u origin master
git branch 查看分支
git branch <branch> 创建分支
git branch -d <branch> 删除分支, 但不能删除未被合并的分支
git branch -D <branch> 强行删除分支, 可以删除未被合并的分支
git branch --set-upstream-to=origin/<branch> <branch> 将远程库分支与本地库分支进行关联
git merge <branch> 合并分支
git merge --no-ff <branch> 合并分支, 这种合并方式可以在分支历史上看到分支信息
git switch -c <branch> 创建并切换分支
git switch <branch> 切换分支
git stash 保存工作区和暂存区的改变
git stash list 查询被保存的工作区和暂存区的改变
git stash apply 恢复工作区和暂存区的改变
git stash drop 删除工作区和暂存区的改变
git stash pop 恢复并删除工作区和暂存区的改变
git cherry-pick 应用已经被提交的改变
git remote 查看远程库信息
git remote -v 查看远程库详细信息
git push 将本地库的修改推送到远程库
git pull 将远程库的修改拉取到本地库
git tag 列出所有标签
git tag <tagname> 为HEAD commit 添加标签
git tag -a <tagname> -m <message> 为标签添加信息
git tag <commit> 制定commit添加标签
git tag -d <tagname> 删除一个标签
git show <tagname> 显示标签信息
git push origin <tagname> 推送一个tag到远程库
git push origin --tags 将本地库中的所有tag推送到远程库
删除远程库中标签, 先将本地库中的标签删除, 再删除远程库中的标签, 如下:
git tag -d <tagname>
git push origin :refs/tags/<tagname>
如果在提交时要忽略掉某些文件, 可以在仓库中添加一个 .gitignore 文件.
git check-ignore -v <filename> 可以查看这个文件是否被忽略和为什么被忽略
给命令配置别名
git config alias.<alias> <command> 给命令取一个别名, 此配置对当前仓库有效, 可以在.git/config文件中查看
git config --global alias.<alias> <command> 给命令取一个别名, 此配置对当前用户有效, 可以在${user.home}/gitconfig中查看
克隆仓库
git clone <repo>
git clean 从工作区移除未追踪的文件
-d 为了避免删除太多文件, git 不会递归地进行删除文件夹. 如果指定了-d, git就会进行递归删除文件夹.
-i 交互式的进行删除文件.
-n 不会移除任何东西, 只是展示命令将会做什么.
git 命令详解
git [--version] [--help] [-C <path>] [-c <name>=<value>]
[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p|--paginate|-P|--no-pager] [--no-replace-objects] [--bare]
[--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
[--super-prefix=<path>]
<command> [<args>]
--version: 获取 git 的版本信息.
--help: 获取命令的详细信息.
-C <path>: 指定 git 命令运行的目录, 有多个-C指定的时候, 后一个-C指定的目录都是基于前一个-C指定的目录的相对路径, 比如在我的D盘下有个work文件夹, 文件夹中有个被git管理的项目叫hello, 此时可以在D盘运行git -C work -C hello status, 查看项目的情况.
-c <name>=<value>: 给定的值将会覆盖git配置文件中的值, =可以忽略不写, 例如 git -c foo.bar, 它会被解析为将foo.bar的值设置为true; 写了=, 没有写value的情况下, git -c foo.bar=, 会被解析为将foo.bar的值设置为false.
--exec-path[=<path>]: 这个路径指的是git的可执行程序的路径, 通常会将它设置为环境变量GIT_EXEC_PATH, 如果没有指定path, 那么它就会打印当前设置的路径并推出命令. 这个命令用来查看当前git的可执行程序的安装位置是一个不错的选择.
--html-path: 这个命令会打印出git的html-doc文档的路径.
--man-path: 打印出man的路径, 但是打印出来了我就去这个路径下找, 没有找到, 版本问题?
--info-path: 打印出info文档的位置, 又在打印出来的路径下找, 又没找到.
-p|--paginate: 对git命令所输出的内容进行分页, 你可以通过上下箭头的按键去浏览输出的信息, 也可以按q退出.
-P|--no-pager: 直接输出git命令执行后的所有内容. 可以通过git -p log和git -P log来比较一下这个两个option的不同之处, 但是log命令输出的内容一定要长, 不然比较不出来.