Devin's Blog

Diversity is essential to happiness

0%

git使用笔记

记录git使用常见命令

一. git clone

git clone

如果只想克隆某一个分支的时候
比方说只想克隆dev分支
git clone -b dev https://github.com/repoweb

二. git tag

项目开发了一个版本比方说V0.1
git tag -a v0.1 -m ‘v0.1’

git tag 过滤
选择自己想看的tag
git tag -l ‘v0.0.*’

想要把这次的tag推送到远程时
git push –tag

git tag 默认是打在最近的一次提交上
如果想在某一次commit处加tag
git tag -a v0.02 f573hb89a -m ‘v0.02’

三. git status

git 中 文件的状态类型有四种
unstracked unmodified modified staged

git status可以显示三种状态

  1. 已经添加到暂存区,待提交的 (git add 后)
  2. 已经修改 但是没有暂存的
  3. 未追踪的文件

四. git diff 差异比较

git diff
比较所有文件差异

git diff [filename]
默认比较workspace 和暂存(add)后的差别 也就是storged区

git diff –staged
比较暂存区和上一次commit的差别

git diff HEAD [filename]
比较指定版本 和 workspace

五. git commit

git commit -m ‘commit message’
提交信息最好遵从一定的规则
我看到的一般是
type(scope):subject

type有以下几种常见的类型:

  1. feat:新功能
  2. fix: 修复bug
  3. style: 格式 代码格式上的调整,不会影响到代码结构
  4. refactor: 代码重构 比如if的嵌套太多,使用swith case 重写
  5. chore: 项目上线,项目进行打包的时候,修改版本号的时候,最后一次提交记录

scope
一般是自己负责的模块

subject
具体的描述

e.g.
git commit -m ‘fix(spi):修复读写的bug’

六. git commond:

git status
git add
git commit

查看历史记录
git log –pretty=oneline
git log –oneline
git relog

注意:git log –oneline 只能显示当前版本的之前版本

七. git 撤销

  1. 未添加到暂存区的撤销
    git checkout – filename
    git checkout – .
  2. 添加到暂存区的撤销
    git reset HEAD filename
  3. 已经提交,想要撤销某次提交
    git revert commit_md5

八. git版本回滚

git reset

1.使用索引值(推荐)
2.使用^符号(只能后退)
3.使用~符号(只能后退)

git reset –hard [索引值]
e.g. git reset –hard cbeabd1

git reset –hard HEAD^
e.g. git reset –hard HEAD^^

回退比较多时
git reset –hard HEAD~3

git reset 三个参数

回头看看git reset 命令本身

  • –soft
    仅仅在本地库中移动HEAD指针

  • –mixed
    在本地库中重置HEAD指针
    重置暂存区

  • –hard
    在本地库中移动HEAD指针
    重置暂存区
    重置工作区

–soft 只是移动了本地库
往前推一个版本,等于说撤销git commit
(还有其他的理解,这种理解需要继续研究)
–mixed 移动
往前推一个版本,等于说撤销git add

untrack文件

某一个文件被add,commit之后怎么删除

工作区rm aaa.txt之后

  1. git status

    1
    2
    git rm aaa.txt
    git rm aaa.txt --cached
  2. git add aaa.txt

    • 将删除的变化加入index
  3. git commit -m “deleted aaa.txt”

  4. git reflog 查看上一次commit

  5. git reset –hard

还有一种情况 我们在工作区删除某个文件之后 只是git add

还有没有将删除操作commit到版本库中

git reset –hard HEAD

删除的文件并找回

前提:删除前,文件存在时的状态有没有提交到本地库

branch

分支的本质是指向提交对象的一个可变指针

查看分支:git branch -v
创建分支:git branch [分支名]
切换分支:git checkout [分支名]
创建分支并且跳转到分支中 git checkout -b [BranchName]
分支删除:git branch -d [BranchName]

合并分支

  1. 切换到接收修改的分支上
    git checkout [需要被添加的内容]
  2. 执行merge
    git merge [有新内容的分支]

冲突

在同一文件的同一位置,两个分支都做了修改
需要合并时,到底要听谁的 这就是冲突

  1. 编辑文件,删除特殊符号
  2. 把文件修改到满意的程度,保存退出
  3. git add 文件名
  4. git commit -m “日志“
    1
    2
    3
    4
    5
    <<<<<<< HEAD
    ggggggggggggg edit by hot-fix
    =======
    ggggggggggggg edit at master branch
    >>>>>>> master

git 远程仓库

远程分支类似于本地分支,是指向远程仓库文件的指针
在实际开发中,每一个本地分支都应该存在一个与远程分支的对应关系。

git fetch fetch 不会对本地仓库内容进行更新
git merge 真正的更新本地仓库的内容
git pull = git fetch + git merge

A 把本地库 push 远程库中
B clone 远程库 到本地 使用 push 提交
A 需要pull 把远程的代码变化下载到本地

git remote

添加新的仓库
git remote add origin2 https://github.com/xxx.git