GIT知识汇总

git 理解

工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

为什么Git添加文件需要addcommit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:

$ git add file1.txt                添加到暂存区
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."     提交到版本库

git创建本地仓库及配置

# 1. git初始化:
git init

# 2. git 配置:
git config user.name "name"
git config user.email "email"

# 3. 查看用户及邮箱:
git config user.name
git config user.email

# 4. 查看配置信息:
git config -l

# 5. 设置忽略文件:
新建 .gitignore文件,在这个文件中写入忽略规则。
  忽略.class文件:*.class
  忽略.idea目录:/.idea

查看日志

# 查看提交的记录
git log

# 一行展示
git log --pretty=oneline
git log --oneline

# 展示修改了哪些文件,修改的内容是什么
git log -p

# 记录你的每一次命令
git reflog

# 图形化界面查看提交记录
gitk

# 查看最近的n次提交
git log -n

# 查看丰富的log
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

  --all 显示所有分支
  --pretty=oneline 将提交信息显示为一行
  --abbrev-commit 使得输出的commitId更简短
  --graph 以图的形式显示

git命令取别名

如:git lg

git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

本地仓库关联远程仓库

# 本地仓库关联远程仓库
    git remote add <远端仓库名称> <远程仓库路径>
    例如:git remote add origin git@gitee.com:wpy/git-test.git,其中origin为远程仓库名称,任意取名,一般默认使用origin作为远程仓库名称

# 推送到远程分支(分支不关联)
    - git push origin master:master    // 推送远程分支
    - git push origin master          // 如果远程分支名和本地分支名称相同,则可以只写本地分支

# 关联分支(好处:可以省略分支名和远端名,直接使用git push)
    - git push -u origin "master"                      // 同名分支关联,如果远程没有该分支,则创建。
    - git push --set-upstream origin master:master     // 同名分支关联,如果远程没有该分支,则创建。
    
    - git checkout -b dev origin/dev                   // 检出远程的dev分支到本地并关联(即:本地没有dev分支,需要切换到dev分支,并拉取远程最新内容。前边的dev代表本地的分支名称。

也可直接看git报错提示:

查看远程库的信息

  1. 查看远程仓库信息:git remote
  2. 查看详细的远程信息:git remote -v
  3. 查看远程分支:git branch -r
  4. 查看本地及远程所有分支:git branch -a
  5. 看当前的本地分支与远程分支的关联关系:git branch -vv

git clone

# git拉取远程指定分支
$ git clone 远程仓库地址 [-b 远程分支] [本地文件目录]

注意点

# git pull
含义:将远端仓库的修改拉到本地并自动进行合并,如果不指定远端名称和分支名,则抓取所有并更新当前分支。
注意:
    1. 工作区和暂存区有内容,则不可以使用git pull
        - 解决方案:
          - 代码commit后,再git pull
          - 本地代码stash暂存后再git pull(commit前的内容都可以暂存)

# git fetch
含义:将仓库里的更新都抓取到本地,不会进行合并。如果不指定远端名称和分支名,则抓取所有分支。
# git push
含义:推送本地版本信息到远程仓库
注意:
    1. 本地的commitID必须包含远程的commitID才可以push
# git checkout
注意:
    1. 工作区和暂存区有内容,则不可以使用git checkout
        - 解决方案:
          - 代码commit后,再git checkout
          - 本地代码stash暂存后再git checkout(commit前的内容都可以暂存)

冲突

修改了同一个文件,则会产生冲突。
容易产生冲突的几个场景:

  1. 分支合并的时候
  2. git pull的时候
  3. 恢复stash暂存的内容

分支

重点理解:master是一个初始分支,master指向最新的提交,HEAD指向当前分支。

# 1. 创建分支:
git branch dev
# 2. 切换分支:
git checkout dev
# 3. 创建并切换分支:
git checkout -b dev

# 4. 合并分支:
git merge dev
# 5. 删除本地分支:
git branch -d dev
# 6. 强制删除本地分支(没有合并过的分支只能强制删除)
git branch -D dev

# 7. 删除远程分支
  删除远程分支方式一:(删除本地及远程分支)
     1. 先删除本地分支:git branch -d dev
     2. 再推送到远程:git push origin :dev(因为推送到远程分支是:git push origin dev:dev)

  删除远程分支方式二:(仅仅只删除远程分支)
      git push origin --delete 分支名

分支使用原则

git stash使用

作用:暂存(commit前的内容都可以暂存)

# 暂存
git stash save '暂存名称'

# 查看暂存记录
git stash list

# 恢复指定的暂存工作, 暂存记录保存在list内,需要通过list索引index取出恢复

# pop命令:恢复后,会删除保存在list内记录
git stash pop stash@{index}
# apply命令:恢复后,暂存区域会保留当前的记录
git stash apply stash@{index}

# 删除list内的某个暂存
git stash drop stash@{index}

# 删除全部暂存
git stash clear

撤销git checkout

前提:必须是已经跟踪的文件。若新增一个文件未add跟踪,则不可撤销。

# 1. 缓存区覆盖工作区(放弃工作区的修改,即撤销还没有git add .时内容)
git checkout -- 目录/指定文件/.

# 2. 版本库覆盖工作区,并覆盖缓存区(同时撤销工作区及暂存区)
git checkout 版本号 目录/指定文件/.

# 3. 仅撤销暂存区的内容(不撤销工作区)
- git reset .                撤销所有
- git reset HEAD -- .        撤销所有
- git reset HEAD -- filename 撤销特定目标

版本回退git reset

# 回退上个版本
git reset --hard HEAD^
# 回退10个版本
git reset --hard HEAD~10
# 回退到指定的版本号
git reset --hard <版本号>

向前或向后切换版本(指针的移动)

HEAD表示当前最新版本
HEAD^表示当前最新版本的前一个版本
HEAD^^表示当前最新版本的前两个版本,以此类推...

HEAD~1表示当前最新版本的前一个版本
HEAD~10表示当前最新版本的前10个版本,以此类推...

撤销与回退版本的对比

# git checkout 版本号 .
当前版本号不变,只是将其他版本的内容覆盖到了当前版本

# git reset --hard 版本号
当前版本号指向其他版本号

删除文件

https://www.liaoxuefeng.com/wiki/896043488029600/900002180232448

创建SSH Key

GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了

ssh-keygen -t rsa -C "youremail@example.com"

版本打标签

# 本地打标签:
git tag -a 标签名 -m '标签描述'

# 推送标签到远程仓库:
git push origin 标签名

# 删除本地标签
git tag -d 标签名

# 删除远程仓库标签
git push origin --delete tag 标签名

参考路径:

  1. https://www.liaoxuefeng.com/wiki/896043488029600
  2. https://study.163.com/course/courseLearn.htm?courseId=1004421003#/learn/video?lessonId=1048771063&courseId=1004421003
  3. https://www.liaoxuefeng.com/wiki/896043488029600/896067008724000
posted @ 2021-06-17 22:43  扬帆去远航  阅读(102)  评论(0编辑  收藏  举报