Git笔记

  |   0 评论   |   0 浏览

Git笔记

工作区(写代码)---> git add 暂存区(临时存储) ---> git commit 本地库(历史版本)

初始化 git init

  • 会生成 .git隐藏目录

形式 (设置签名)

  1. 用户名:
  2. Email地址:
  3. 作用:
    1. 区分不同开发人员的身份
  4. 辨析:
    1. 这里设置的签名和登录远程库(代码托管中心)的帐号、密码 没有任何关系
  5. 命令:
    1. 项目级别/仓库级别:
      1. 仅在当前本地库范围内有效
        1. git config user.name xxx
        2. git config user.email xxx@xx.com
    2. 系统用户级别:
      1. 登录当前操作系统的用户范围
        1. git config --global user.name xxx
        2. git config --global user.email xxx@xx.com
    3. 优先级:
      1. 就近原则:项目级别优先于系统级别,二者都有时采用项目级别的签名
      2. 如果只有系统用户级别的签名,就以系统用户级别的签名为准
        1. 二者都没有 是不允许的
    4. 设置之后的值就会显示 在config文件中. /.git/config

命令

  • git status 状态查看操作
    • 查看工作区、暂存区状态

在vim 编辑器中 : set nu 显示行号。 如果提交的时候 用的nano编辑器,可以在config文件中,在core中后面添加 editor=vim 即可使用vim编辑器了。

  • 添加操作
    • git add filename
    • 将工作去的 “新建/修改” 添加到暂存区
  • git commit 提交到仓库
    • 将暂存区的内容提交到本地库
  • git commit -m "需要附加的信息" 文件名

怎么实现版本的前进与后退

**git log **查看历史版本

  • 多屏显示控制方式:
    • 空格向下翻页
    • b向上翻页
    • q退出

  • git log --pretty=oneline
  • git log --oneline
    • 只显示当前使用版本的 以后的旧版本
  • git reflog

前进后退

  • HEAD - > 的移动
  • 基于索引值的操作
    • git reset --hard hash索引值
  • 使用^符号进行操作(只能后退)
    • git reset --hard HEAD^ (回退一个版本)
    • git reset --hard HEAD^^^ (回退三个版本)
  • 使用~符号进行操作 (也是只能后退的)
    • git reset --hard HEAD~3 (回退三个版本)
    • ~n 就是后退n步

reset命令的三个参数对比

  • --soft参数
    • 仅仅在本地库移动HEAD指针
  • --mixed参数
    • 在本地库移动HEAD指针
    • 重置暂存区
  • --hard参数
    • 在本地库移动HEAD指针
    • 重置暂存区
    • 重置工作区

删除文件找回

  • 前提: 删除前,文件存在时的状态提交到了本地库
  • 操作:git reset --hard 指针位置
    • 删除操作已经提交到本地库: 指针位置指向历史记录
    • 删除操作未提交到本地库: 指针位置使用HEAD

比较文件差异

  • git diff [文件名]
    • 将工作区中的文件和暂存区进行比较
  • git diff [本地库中历史版本]..[文件名]
    • 将工作区中的文件和本地库历史记录比较
  • 不带文件名比较多个文件

撤销合并的代码

git merge 之后,有冲突,我又不想合了;

没add之前,可以执行 git merge --abort

单独合并某条提交记录 可以使用 git cherry-pick

删除远程端的提交记录

//切换到新的分支
git checkout --orphan latest_branch

//缓存所有文件(除了.gitignore中声名排除的)
git add -A

//提交跟踪过的文件(Commit the changes)
git commit -am "commit message"

//删除master分支(Delete the branch)
git branch -D master

//重命名当前分支为master
git branch -m master

//提交到远程master分支 (Finally, force update your repository)
git push -f origin master

分支管理

  • Master

必须记的命令

Working Tree 当前的工作区域

Index/Stage 暂存区域,和git stash命令暂存的地方不一样。使用git add xx,就可以将xx添加近Stage里面

Repository 提交的历史,即使用git commit提交后的结果

  • git reset --mixed commit_id

    切换指定的版本,暂存区的数据 也切换了,需要重新 add

    保留工作目录,并且清空暂存区

  • git reset --soft commit_id

    保留工作目录和暂存区中的内容,并把重置 HEAD所带来的新的差异放进暂存区。

  • git reset --hard commit_id

    会在重置 HEADbranch的同时,重置stage区和工作目录里的内容。当你在 reset 后面加了 --hard 参数时,你的stage区和工作目录里的内容会被完全重置为和HEAD的新位置相同的内容。换句话说,就是你的没有commit的修改会被全部擦掉。

    以commit_id版本为准,工作目录的文件 也会重置。

  • git rebase --abort
  • git checout --orphan test

    假如你的某个分支上,积累了无数次的提交,你也懒得去打理,打印出的log也让你无力吐槽,那么这个命令将是你的神器,它会基于当前所在分支新建一个赤裸裸的分支,没有任何的提交历史,但是当前分支的内容一一俱全。新建的分支,严格意义上说,还不是一个分支,因为HEAD指向的引用中没有commit值,只有在进行一次提交后,它才算得上真正的分支。还等什么呢?赶紧试试!

  • git branch -D 分支名字

    删除一个分支

  • git branch -m 新的分支名字

    修改当前分支的名字

  • git rm -r --cached 文件名

    删除 暂存区(index / stage)的文件

多分支并行开发、bug修复

问题:

image.png

此时 我们可以使用 git cherry-pick 命令

两个分支的代码几乎是一个,部分 不同,也是说 一个是生产环境、一个是开发环境。

这里我们需要将 开发环境中的 bug修复 的代码 合并到 生产环境分支上。

由于内容部分差异,可能会冲突、覆盖,我们可以 只开发环境上 提交记录 同步到 生产环境分支上。

参考来源:http://www.ruanyifeng.com/blog/2020/04/git-cherry-pick.html

git cherry-pick 分支名

默认将 指定分支的 最新一条提交记录 同步 到当前所在分支,并生成新的记录。

git cherry-pick <commitHash>

将 指定的提交 应用于 当前分支,这会在当前 分支产生一个新的提交,当然它们的哈希值会不一样。

git cherry-pick <HashA> <HashB>

将A和B两个提交应用到当前分支。这会在当前分支生成两个对应到新提交。

git cherry-pick A..B

上面到命令可以转移 从A到B到的所有提交。它们必须按照正确的顺序放置:提交A必须 早于 提交B,否则命令将失败,但不会报错。

注意:上面的命令,提交A 将不会包含在Cherry pick中。如果要包含提交A,可以使用下面的语法:

git cherry-pick A^..B

git stash

stash 可以跨分支使用!!!

需求:在当前分支修改了代码,但是不想add,但想要切换分支。

可以向将当前分支的状态保存起来

在 执行 add 之前,才能执行git stash

  • 保存当前状态:git stash save "备注",也直接使用 git stashhttps://b3logfile.com/file/2021/05/image-bc151606.png

  • 查看所有的stash:git stash listimage.png

  • 应用某个存储:git stash apply (可恢复多次,stash仍然存在)

    image.png

  • 应用某个存储:git stash pop stash@{0} (只能恢复一次,恢复后 对应stash消失)

    image.png

    使用这个命令恢复时,该条stash 也随之被移除。

    image.png

  • 删除指定stash:git stash drop stash@{0}

    image.png

  • 清空所有的stash:git stash clear

    image.png

可参考:https://www.jianshu.com/p/1e65e938f93c

使用场景:比如我当前在master分支已经把新需求的代码已经写好了,还没有 添加到暂存区,但是开发规范规定 不能在master分支上进行开发,需要我们另外创建分支。我们可以将当前工作区的代码 保存到stash上,使用 git stash save "备注信息", 然后我们创建分支,切换到指定分支,然后恢复一下就行了。

git stash pop stash@{0} 【0 是因为我当前只有一个stash,可以查看一下你的stash git stash list

git tag 打版本号

git tag 版本号

git push origin 版本号

查看所有tag

git tag