Git 入门学习笔记(Git 命令集)

学习网址:Git教程 - 廖雪峰的官方网站
本文整理自上面这个学习网站,并非 Git 全部命令

〇、配置

配置用户名和Email
git config --global user.name "supsunc"
git config --global user.email "supsunc@github.com"
查看用户名和Email
git config user.name
git config user.email

一、基础

创建仓库
git init # 将当前文件夹作为 git 仓库
添加文件
git add <file> # 添加文件到暂存区
提交文件
git commit -m <message>	# 提交暂存区内容到当前分支
查看状态
git status
查看修改
git diff <file>
查看日志
# 输出完整日志,所有的更新:
# commit id(一个 SHA-1 校验和)
# 作者的名字 和 电子邮件地址
# 提交时间
# 最后缩进一个段落显示提交说明
git log

git log --pretty=oneline # 输出单行日志
git log --pretty=short
git log --pretty=full
git log --pretty=fuller
git log --pretty=format:"%h - %an, %ar : %s"
git log -p # 展开显示每次提交的内容差异
git log -2 # 仅显示最近的两次更新
git log --stat # 仅现实简要的增删行数统计
git log --shortstat # 只显示 --stat 中最后的行数修改添加移除统计
git log --graph # 显示 ASCII 图形表示的分支合并历史
git log --name-only # 仅在提交信息后显示已修改的文件清单
git log --name-status # 显示新增、修改、删除的文件清单
git log --abbrev-commit # 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符
git log --relative-date # 使用较短的相对时间显示(比如,“2 weeks ago”)

--pretty=format常用格式占位符及其代表的意义

选项说明
%H提交对象(commit)的完整哈希字串
%h提交对象的简短哈希字串
%T树对象(tree)的完整哈希字串
%t树对象的简短哈希字串
%P父对象(parent)的完整哈希字串
%p父对象的简短哈希字串
%an作者(author)的名字
%ae作者的电子邮件地址
%ad作者修订日期(可以用 -date= 选项定制格式)
%ar作者修订日期,按多久以前的方式显示
%cn提交者(committer)的名字
%ce提交者的电子邮件地址
%cd提交日期
%cr提交日期,按多久以前的方式显示
%s提交说明
回退版本
git reset --hard <commit_id> # 回退至指定提交的版本
git reset --hard 1094a  # 回退至 1094a 开头的版本

git reset --hard HEAD^  # 回退上一个版本
git reset --hard HEAD^^ # 回退上两个版本
git reset --hard HEAD~2 # 回退上两个版本
回退指定文件
git reset HEAD <file>
查看操作日志
git reflog
修改恢复,丢掉工作区的修改
git checkout -- <file> # 将文件恢复至最近一次 git commit 或 git add 时的状态
删除文件
git rm <file> # 删除操作在暂存区,还需要 git commit 到当前分支

二、远程仓库

创建 SSH Key
ssh-keygen -t rsa -C "supsunc@github.com"
添加远程库
git remote add origin git@<server-name>:<path>/<repo-name>.git
git remote add origin git@github.com:supsunc/docTool.git
推送提交到远程库
git push -u origin master # -u 参数:首次推送时,将本地的 master 分支和远程的 master 分支关联起来
git push origin master
git push origin HEAD # 把当前分支推送到远程仓库
git push origin dev # 将本地的 dev 分支推送到远程仓库,需先在本地创建 dev 分支
克隆一个仓库到本地
git clone git@github.com:supsunc/docTool.git

三、分支

查看分支
git branch
创建并切换分支
# 创建指定分支
git branch <name>
git branch dev
# 切换至指定分支
git checkout <name>
git checkout dev
# 创建并切换指定分支
git checkout -b <name>
git checkout -b dev

# switch 是最新版本 Git 提供的命令
# 切换至指定分支
git switch <name> 
git switch master
# 创建并切换分支
git switch -c <name> 
git switch -c dev
合并分支
git checkout master # 切换至 master 分支
git merge dev # 将 dev 分支的工作成果合并至 master 分支
# git merge 用于将指定分支合并至当前分支
# 提示 Fast-forward 信息,就是直接将 master 指向 dev,所以合并速度非常快

git merge --no-ff -m <message> dev # --no-ff 参数表示禁用 Fast forward,合并后创建一个新的 commit
删除分支
git branch -d <name>
git branch -d dev
存储工作区
git stash # 将工作区改动存储到起来,并恢复工作区至初始状态

# 添加信息,不加 -m 参数则以最新 commit message 为信息
git stash -m <message>
git stash -m "修复 bug"

# 每次 stash 的工作区在 stash list 中都是 0 号位置,已有 stash 顺移
# 可以将 stash 理解为栈,压栈出栈
恢复工作区
git stash list # 查看 stash 列表
# stash@{0}: On dev: 修复 bug
# stash@{1}: WIP on dev: f52c633 add merge
git stash apply stash@{0}

git stash apply # 恢复 0 号位置的工作区,但并没有删除 stash
git stash drop # 删除 0 号位置的 stash

git stash pop # 恢复 0 号位置的工作区并将 stash 删除
bug 修复:创建新分支并合并到主分支
git stash # 将工作区改动存储起来,并恢复工作区至初始状态
git checkout master # 确定在哪个分支上修复 bug,切换至该分支

git checkout -b issue-101 # 新建分支并切换至该分支
git add readme.txt
git commit -m "fix bug"	# 提交

git switch master   # 切换回 master
git merge --no-ff -m "merge bug fix 101" issue-101 # 将 issue-101 分支合并至 matser 分支并新建提交
git branch -d issue-101 # 删除 issue-101 分支

git switch dev # 回到 dev 分支继续开发
git stash list # 查看 stash 列表
git stash pop # 恢复工作区并将 stash 删除
复制特定提交到当前分支
git cherry-pick 4c805e2 # 将 4c805e2 提交的改动应用到当前分支
强行删除分支
git branch -D dev # 如果 dev 分支没有被合并过,需要使用 -D 强行删除该分支
查看远程仓库信息
git remote
git remote -v # 显示更详细的信息
推送分支
git push origin master
git push origin dev
抓取分支
# 另一台电脑操作
git clone git@github.com:supsunc/docTool.git
git checkout -b dev origin/dev
git add test.txt
git commit -m "add test"
git push origin dev

# 自己的电脑
git add test.txt
git commit -m "add new test"
git push origin dev # 此处会导致推送失败,提示冲突

git pull # 先将最新的提交从 origin/dev 抓下来,然后在本地合并解决冲突再推送
# git pull 提示 There is no tracking information for the current branch.
# 意思是没有指定本地 dev 分支与远程 origin/dev 分支的链接
# 需要做如下操作
git branch --set-upstream-to=origin/dev dev
git pull

# 手动解决冲突后,再提交、push
git commit -m "fix test conflict"
git push origin dev

总结

  1. 首先,可以试图用git push origin <branch-name>推送自己的修改;
  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
  3. 如果合并有冲突,则解决冲突,并在本地提交;
  4. 没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!
  5. 如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>
将本地未 push 的分叉提交历史整理成直线
git rebase
# rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

四、标签

打标签 tag
git checkout master # 切换到要打标签的分支上
# 打一个新标签,默认标签打在最新提交的 commit 上,即 HEAD。
git tag <name>
git tag v1.0

git tag <name> <commit_id>
git tag v0.9 f52c633

# 查看所有标签
git tag
# 查看标签信息
git show <tagname>
git show v0.9

# 创建带有说明的标签,用命令 git show <tagname> 可以看到说明文字
git tag -a <name> -m <message> <commit_id> # -a 指定标签名   -m 指定说明文字
git tag -a v0.1 -m "version 0.1 released" 1094adb

ps: 标签和 commit 挂钩,如果同一个 commit出现在两个分支上,那么两个分支上都可以看到这个标签

删除标签
git tag -d v0.1
推送标签到远程库
git push origin <tagname>
git push origin v1.0

git push origin --tags # 一次性推送全部尚未推送到远程的本地标签
删除远程库标签
# 先从本地删除
git tag -d <tagname>
git tag -d v0.9
# 再从远程删除
git push origin :refs/tags/<tagname>
git push origin :refs/tags/v0.9

五、知识点补充

git remote prune origin

删除本地上 远程仓库已经删除的分支

git remote prune origin
git fetch

该命令不会动本地分支的 commit,仅仅数据拉取下来而已

# 从远程仓库拉取全部分支到本地
git fetch origin
# 从远程仓库拉取 master 分支到本地,并不动本地分支的 commit
git fetch origin master
# 删除本地上 远程仓库已经删除的分支。然后从远程仓库拉取全部分支到本地
# 相当于执行了
# git remote prune origin
# git fetch
git fetch -p
git pull
# 删除本地上 远程仓库已经删除的分支。然后拉取全部分支,并 merge 到最新提交
# 相当于执行了
# git remote prune origin
# git fetch
# git merge origin/master
git pull -p
git branch
git branch -r	# 查看远程全部分支
git bash -vv	# 查看本地分支详情:分支名、最新提交id、[对应远程分支]、最新提交 message
git gc
git gc --auto	# 快速 gc,git 会在适当的时候自动调用该方法
# 全面完整、追求性能的 gc,会大大减少 .git 文件夹大小
#(对于多人开发、大量提交来说才会,本来就很小的再小也小不到哪去)
git gc --aggressive
# 在 git gc --aggressive 命令中会执行 git gc --prune,不过时间不是 now
# 该命令谨慎操作,如非特殊需要,不建议直接执行该命令
git gc --prune=now
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值