本文记录一些学习《Pro Git》book的一些笔记和工作中常用到的一些git指令。

  • git相当于一个小型文件系统,保存的是各个不同版本的文件,而非版本之间的修改。
  • git config 分为三级,–system所有用户,–global当前用户,–local当前项目。后两个比较常用同样的配置项下一级会覆盖上一级
  • git config --list --show-origin
    列出已配置的项以及配置文件的位置
  • git config --global user.name “John Doe”
    刚安装完git通常要执行的命令,否则无法commit
  • git config --global user.email johndoe@example.co
    刚安装完git通常要执行的命令,否则无法commit
  • git init
    新建本地仓库
  • git clone url
    拉取远端项目到本地
  • git clone url newName
    拉取项目到本地,且文件夹名字为newName
  • git add file
    将文件添加到暂存区
  • git add -u
    添加所有已修改和删除的tracked files到暂存区,不包括新增
  • git reset HEAD file
    将文件从暂存区移出
  • git checkout – file
    将文件变为上一次add或者commit的最新状态
  • git diff
    比较的是工作区与暂存区之间的变化
  • git diff --cached或者–staged
    比较暂存区与最新一次提交之间的变化
  • git status
    查看当前仓库状态
  • git commit
    提交,提交信息使用默认编辑器编辑
  • git commit -m “123”
    提交,提交信息-m之后的信息
  • git commit -a (–all)
    等价于git add -u加git commit
  • git rm file
    不再跟踪文件且删除工作区文件,支持正则表达式
  • git rm --cached file
    不再跟踪文件且保留工作区文件,支持正则表达式
  • git mv nameA nameB
    重命名或者移动。等价于三个指令mv README.md README+git rm README.md+git add README
  • git log
    查看提交历史
  • git log -n
    显示n次提交历史
  • git log -p(–patch)
    显示每次提交所引入的差异(每次提交与上一次提交的变化)
  • git log --pretty=oneline
    每次提交信息只显示一行
  • git log --pretty=oneline --graph
    –graph以分支图的形式显示信息
  • git log --since=2022-01-01
    显示时间点以来的提交
  • git rebase master
    将当前分支rebase到master分支
  • git rebase master dev
    将dev分支rebase到master分支
  • git rebase -i HEAD~2
    合并最近的2次提交
  • git rebase --continue
    继续rebase过程
  • git rebase --abort
    撤销此次rebase过程
  • git config --global merge.tool meld
    使用meld解决冲突
  • git mergetool
    当前仓库存在冲突时,使用配置好的冲突解决工具解决冲突
  • git reset hash
    重置HEAD指针到指定hash,不改变工作区内容
  • git reset --hard hash
    重置HEAD指针到指定hash,且改变工作区内容到指定hash版本
  • git stash -m “message”
    将当前工作区未commit的修改放到stash中
  • git stash apply 0
    应用索引0的stash,但不删除
  • git stash pop 0
    应用索引0的stash,且删除
  • git checkout -b branch_name
    创建新分支并切换到该分支
  • git checkout branch_name
    切换分支
  • git checkout branch_name --recursive-modules
    所有仓库和子仓库切换到指定分支
  • git pull --recursive-modules
    拉取所有仓库和子仓库
  • git commit --amend
    重新提交上次commit
  • git tag
    显示已有标签
  • git tag -a tag_name -m “message” [HASH]
    给当前commit添加annotated tag附注标签,包含打标签者的名字、电子邮件地址、日期时间, 此外还有一个标签信息,带上hash给指定commit加tag
  • git tag tag_name [HASH]
    给当前commit添加lightweight tag轻量标签,带上hash给指定commit加tag
  • git push origin tag_name
    push 标签
  • git push --tags
    push所有标签
  • git tag -d tag_name
    删除标签
  • git push origin --delete tag_name
    删除远程标签
  • git config --global alias.last ‘log -1 HEAD’
    命令别名。git last==git log -1 HEAD
  • git remote prune origin
    远程仓库分支删除后,删除相应的引用
  • git branch
    查看本地分支和当前分支
  • git branch -d branch_name
    删除本地分支
  • git branch --merged [branch_name]
    查已经merge到当前分支/branch_name分支的所有分支,
  • git branch --no-merged [branch_name]
    查没有merge到当前分支/branch_name分支的所有分支
  • git merge branch_name
    在当前分支创建合并分支节点,并合并branch_name分支到当前分支
  • git checkout -b serverfix origin/serverfix
    创建分支本地分支serverfix,并1. 切换到该分支 2. 设置远程仓库origin上的serverfix远程分支为跟踪的分支
  • git fetch
    命令从服务器上抓取本地没有的数据,它并不会修改工作目录中的内容。 它只会获取数据然后让你自己合并
  • git pull
    它的含义是一个 git fetch 紧接着一个 git merge 命令
  • git push origin -d serverfix
    从origin仓库中删除分支serverfix
  • git rebase --onto master server client
    取出 client 分支,找出它从 server 分支分歧之后的补丁, 然后把这些补丁在 master 分支上重放一遍,让 client 看起来像直接基于 master 修改一样
  • git rebase basebranch topicbranch
    topicbranch变基到basebranch

(Pro Git 前三章完结)