Git命令整理

目录

参考

Git初步认识

Git仓库关系图

Git仓库间命令使用示意图

Git权限

文件状态转换图

Git基础篇

Git配置

Git建立忽略文件

Git别名

获取Git仓库

创建本地仓库

拉取远程仓库

fetch

添加文件

提交文件

查看状态

查看日志

比较差异

分支管理

查看分支

创建分支

切换分支

删除分支

合并分支

拉取

推送

Git进阶

常用命令


 

参考

 

  • http://www.gitblit.com/administration.html
  • https://juejin.im/post/5d157bf3f265da1bcc1954e6
  • https://www.jianshu.com/p/b357df6794e3
  • https://mp.weixin.qq.com/s/eG6a4K8u_qx6NpupOoxk8Q

 

Git初步认识

Git仓库关系图

Git命令整理_第1张图片

  • 本地仓库是对于远程仓库而言的。
  • 本地仓库 = 工作区 + 版本区
  • 工作区即磁盘上的文件集合。
  • 版本区(版本库)即.git文件
  • 版本库 = 暂存区(stage) + 分支(master) + 指针Head
  • 以我使用最频繁的git命令为例,即提交到github为例。
    • git init原本本地仓库只包含着工作区,这是最常见的工作状态。此时,git init一下,表示在本地区域创建了一个.git文件,版本区建立。
    • git add . 表示把工作区的所有文件全部提交到版本区里面的暂存区
    • 当然你也可以通过 git add ./xxx/ 一条一条分批添加到暂存区。
    • git commit -m "xxx" 把暂存区的所有文件提交到仓库区,暂存区空空荡荡。
    • git remote add origin https://github.com/name/name_cangku.git 把本地仓库与远程仓库连接起来。
    • git push -u origin master 把仓库区的文件提交到远程仓库里。
    • 一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的。会有这样的信息nothing to commit, working tree clean

Git仓库间命令使用示意图

Git命令整理_第2张图片

 

注:checkout一般是将暂存区的文件替换工作区的

 

Git权限

Git命令整理_第3张图片

  • V ,可以使用浏览器查看、订阅RSS、zip打包下载
  • R ,具有V的所有权限,还具有复制(克隆)远程仓库到本地的权限
  • RW,具有R的所有权限,还具有推送到远程仓库的权限
  • RWC,具有RW的所有权限,还具有创建远程分支的权限
  • RWD,具有RWC的所有权限,还具有删除远程分支的权限
  • RW+ ,具有RWD的所有权限,还具有回退远程分支的权限

 

其他:
admin ,拥有所有权限(这毋庸置疑)
owner,可以创建、编辑、重命名、删除、fork个人仓库
认证用户,可以创建个人仓库、fork个人仓库

文件状态转换图

Git命令整理_第4张图片

Git基础篇

Git配置

 

  • git config --global user.name “你的名字”
  • git config --global user.email “你的邮箱”
  • git config -l 查看配置

 

 

注:global表示全局,这台机器所有的Git仓库都会使用这个配置。允许单个仓库使用其他的名字和邮箱。

 

Git建立忽略文件

 

  • touch .gitignore 在当前目录下建立一个.gitignore文件,可以有多个,影响范围当前文件(夹)及子文件(夹)

.gitignore文件忽略内容demo:

*.iml
*.apk
.gradle/
.idea/
gradlew/
gradlew.bat
local.properties
.idea/workspace.xml
.idea/libraries/
.DS_Store
build/
captures/
.externalNativeBuilda
.svn/
app/release/

 

注:为什么没有生效,可能是因为你的缓存区已经有忽略的文件了,所以需要先清空缓存区里的文件,重新add和commit操作

 

Git别名

 

有两种配置:1、命令方式,2、修改配置文件

  • git config --global alias.psm “push origin master” 以上就是将push origin master命令修改别名为psm,这样的话,使用的时候就只需要输入:git psm就搞定了

如果要批量修改,可以直接改配置文件。
如果是windows系统,那么直接找到用户目录下的 .gitconfig 文件,如下:

Git命令整理_第5张图片

通过文本打开,然后可以看到:

Git命令整理_第6张图片
以上是我电脑设置的别名,其中[alias]就是设置别名组,如果没有设置过,可以直接手动添加[alias]组

[alias]
co = checkout
ci = commit
st = status
br = branch
psm = push origin master\n
plm = pull origin master
last = log -1 HEAD
lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative

 

获取Git仓库

创建本地仓库

假设在D盘的根目录下创建本地仓库gittest

  • cd d: 或者 cd /d 进入D盘根目录
  • mkdir gittest 创建gittest目录
  • cd gittest 进入gitest目录
  • git init 初始化版本库

 

 

注:版本库创建好之后,会多出一个.git的文件夹,并且会自动新建一个master分支。

 

拉取远程仓库

命令格式: git clone <本地路径(可选)> 

  • git clone https://github.com/libgit2/libgit2 克隆远程仓库到当前目录
  • git clone https://github.com/libgit2/libgit2 /d/gittest 克隆远程仓库到指定目录
  • git clone -b <分支名> xxx.git 在本地创建与远程仓库同名的分支,且该分支名必须在远程仓库中已存在

 

 

注:git clone 命令默认的只会建立master分支

 

fetch

命令格式:git fetch remote_repo remote_branch_name:local_branch_name

  • git fetch origin master 将远程仓库的master分支拉到本地版本区

     

 

添加文件

 

  • git add <文件名> 添加某文件到暂存区
  • git add -a -m “” 将当前分支工作区的所有文件提交到暂存区
  • git add . 把工作区的文件全部提交到暂存区
  • git add -A 提交所有变化
  • git add -u u->update,提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
  • git add . 提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件

 

提交文件

 

  • git commit -m “提交信息备注” 提交暂存区的文件到本地版本库
  • git commit -a -m “提交信息备注” 将所有已跟踪文件中的执行修改或删除操作的文件都提交到本地仓库,即它们没有经过git add添加到暂存区
  • git commit -f -m “提交信息备注” 强制提交
  • git commit --amend 也叫追加提交,它可以在不增加一个新的commit-id的情况下将新修改的代码追加到前一次的commit-id中

 

查看状态

 

状态信息:新增的文件、被修改的文件、已添加到暂存区但未提交的文件

  • git status 查看工作区状态
  • git status -v 查看工作区状态详情

 

查看日志

 

  • git log 查看提交日志
  • git last 显示最近一次的提交
  • git log --oneline 已每个分支节点一行简化输出log
  • git log --stat 在git log 的基础上输出文件增删改的统计数据
  • git log -p 控制输出每个commit具体修改的内容,输出的形式以diff的形式给出。
  • git shortlog 用来输出汇总信息,以作者进行分类。
  • git shortlog -s 可以用来统计每个作者的commit数量
  • git shortlog -n 可以用来对统计的量进行倒序排列
  • git log --pretty=”%cn committed %h on %cd” 自定义输出的信息
  • git log --author=”XXX” 用来过滤commit,限定输出给定的用户
  • git log --before/--after 限定指定日期范围的log,git log --after=‘18-4-2020’
  • git log --merges/--no-merges 查看合并/非合并log
  • git log --decorate 显示对应commit所属的branch和tag信息
  • git log --oneline --graph --decorate 查看分支图

 

比较差异

 

diff里面a表示前面那个变量,b表示第二个变量

  • git diff 比较工作区与暂存区中所有已跟踪文件的差异
  • git diff <文件名> 比较工作区与暂存区中某文件的差异
  • git diff --stat 比较工作区与暂存区中所有已跟踪文件的简要差异
  • git diff --cached <文件名> 比较暂存区与版本库中文件的差异,等同参数--staged
  • git diff --staged <文件名> 比较暂存区与版本库中文件的差异,等同参数--cached
  • git diff <分支hash1> <分支hash2> 比较两个分支的差异
  • git diff <分支1>…<分支2> 输出自<分支1>和<分支2>开发以来,<分支2>分支上发生的changed
  • git diff <分支1> <分支2> 比较两个分支的差异

 

分支管理

查看分支

 

  • git branch 查看本地分支
  • git branch -a 查看所有分支
  • git branch -av 查看所有分支详情
  • git branch -avv 查看所有分支详情,包括本地分支与远程分支的对应情况
  • git branch -r 查看远程分支

 

创建分支

 

  • git branch <分支名> 创建某分支

 

切换分支

 

  • git checkout <分支名> 切换到某分支
  • git checkout -b <分支名> 创建并切换到某分支

 

 

注:
git checkout -t origin/<分支名> 等同于 git checkout -b dev origin/<分支名> 在本地新建同名的某分支,并切换到该分支
git checkout - 切换到之前的分支
git checkout -- <文件名> 将暂存的某文件替换工作区的

 

删除分支

 

  • git branch -d <分支名> 删除某分支

 

合并分支

 

  • git merge dev 将dev分支合并到当前分支,fast-forwarding模式
  • git merge --no--ff dev 将dev分支合并到当前分支,非fast-forwarding模式
  • git merge origin/master 将origin上的master分支 merge 到当前 branch 上

 

 

注:ff模式合并如果删除分支,则会丢失merge分支信息。no-ff模式可以保存你之前的分支历史。能够更好的查看 merge历史,以及branch 状态。

 

拉取

 

git pull命令用于将远程主机分支,更新到本地。它的格式与git push命令相仿。
git pull <远程主机名> <远程分支名>:<本地分支名>

  • git pull origin master 将origin主机的master分支拉到本地的当前分支。
  • git pull origin master:dev 将origin主机的master分支拉到本地的dev分支。如果后者不存在,则会被新建。
  • git pull origin master --allow-unrelated-histories

 

推送

 

git push命令用于将本地分支的更新,推送到远程主机。它的格式与git pull命令相仿。
git push <远程主机名> <本地分支名>:<远程分支名>

注意:这里的:前后是必须没有空格的。

注意,分支推送/拉取顺序的写法是<来源地from>:<目的地to>,所以git pull是<远程分支>:<本地分支>,而git push是<本地分支>:<远程分支>。

如果省略远程分支名,则表示将本地分支推送与之存在”追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。

 

  • git push origin master 将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建。
  • git push origin :master 等同于 git push origin --delete master 表示删除origin主机的master分支,危险,操作需谨慎!!!省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。
  • git push origin 将当前分支推送到origin主机的对应分支。如果当前分支只有一个追踪分支,那么主机名都可以省略。
  • git push -u origin master 将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。 其中 -u 等同于 --set-upstream。
  • git push 当前分支只有一个追踪分支,那么主机名都可以省略。

Git进阶

一、开发分支(dev)上的代码达到上线的标准后,要合并到 master 分支

  • git checkout dev 切换到dev分支
  • git pull 更新dev分支
  • git checkout master 切换到master分支
  • git merge dev 将dev分支合并到master分支
  • git push -u origin master 将本地master分支推送到origin远程仓库的master分支中

二、当master代码改动了,需要更新开发分支(dev)上的代码

  • git checkout master 切换到master分支
  • git pull 更新master分支
  • git checkout dev 切换到dev分支
  • git merge master 将master分支合并到dev分支
  • git push -u origin dev 将本地dev分支推送到origin远程仓库的master分支中

 

常用命令

 

  • git config --global user.name “你的名字” 让你全部的Git仓库绑定你的名字
  • git config --global user.email “你的邮箱” 让你全部的Git仓库绑定你的邮箱
  • git config --global color.ui true 让Git显示颜色,会让命令输出看起来更醒目
  • git init 初始化你的仓库
  • git add . 把工作区的文件全部提交到暂存区
  • git add .// 把工作区的文件提交到暂存区
  • git add -f  强制提交已忽略的的文件
  • git commit -m “xxx” 把暂存区的所有文件提交到仓库区,暂存区空空荡荡
  • git remote add origin https://github.com/name/name_cangku.git 把本地仓库与远程仓库连接起来
  • git push -u origin master 把仓库区的主分支master提交到远程仓库里
  • git push -u origin <其他分支> 把其他分支提交到远程仓库
  • git status查看当前仓库的状态
  • git diff 比较工作区与暂存区中所有已跟踪文件的差异
  • git diff <文件名> 比较工作区与暂存区中某文件的差异
  • git diff --cached <文件名> 比较暂存区与版本库中文件的差异,等同参数--staged
  • git diff --staged <文件名> 比较暂存区与版本库中文件的差异,等同参数--cached
  • git diff <分支hash1> <分支hash2> 比较两个分支的差异
  • git log 显示从最近到最远的提交历史
  • git log --graph 查看分支合并图
  • git log --oneline --graph --decorate 查看分支合并图
  • git clone + 仓库地址下载克隆文件
  • git reset --hard + 版本号 回溯版本,版本号在commit的时候与master跟随在一起
  • git reflog 显示命令历史
  • git checkout --  撤销命令,用版本库里的文件替换掉工作区的文件。我觉得就像是Git世界的ctrl + z
  • git rm 删除版本库的文件
  • git branch 查看当前所有分支
  • git branch <分支名字> 创建分支
  • git branch -a 查看所有分支
  • git branch -av 查看所有分支详情
  • git branch -avv 查看所有分支详情,包括本地分支与远程分支的对应情况
  • git branch -d <分支名字> 删除分支,有可能会删除失败,因为Git会保护没有被合并的分支
  • git branch -D + <分支名字> 强行删除,丢弃没被合并的分支
  • git checkout <分支名字> 切换到分支
  • git checkout -b <分支名字> 创建并切换到新分支
  • git merge <分支名字> 合并分支
  • git merge --no-ff <分支名字> 合并分支的时候禁用Fast forward模式,因为这个模式会丢失分支历史信息
  • git stash 当有其他任务插进来时,把当前工作现场“存储”起来,以后恢复后继续工作
  • git stash list 查看你刚刚“存放”起来的工作去哪里了
  • git stash apply 恢复却不删除stash内容
  • git stash drop 删除stash内容
  • git stash pop 恢复的同时把stash内容也删了
  • git remote 查看远程库的信息,会显示origin,远程仓库默认名称为origin
  • git remote -v 显示更详细的信息
  • git pull 把最新的提交从远程仓库中抓取下来,在本地合并,和git push相反
  • git rebase 把分叉的提交历史“整理”成一条直线,看上去更直观
  • git tag 查看所有标签,可以知道历史版本的tag
  • git tag  打标签,默认为HEAD。比如git tag v1.0
  • git tag <版本号> 把版本号打上标签,版本号就是commit时,跟在旁边的一串字母数字
  • git tag -a -m “<说明>“ 创建带说明的标签。 -a指定标签名,-m指定说明文字
  • git tag -d  删除标签
  • git show  查看标签信息
  • git push origin  推送某个标签到远程
  • git push origin --tags 一次性推送全部尚未推送到远程的本地标签
  • git push origin :refs/tags/ 删除远程标签
  • git check-ignore -v  检查为什么Git会忽略该文件

你可能感兴趣的:(心得)