• git(一) 基础



           git是开源的分布式文件管理系统,具有最优的存储能力、非凡的性能、开源的、很容易做备份、支持离线操作、很容易定制工作流程等优点。在Git的基础上衍生出GitHub和GitLab这两个非常流行的代码托管平台,很多公司包括阿里云、去哪儿、携程等都在GitLab平台的基础上做自己的二次开发。
    中文文档地址为https://git-scm.com/book/zh/v2,内容非常好,包含介绍、安装等。

    1. 初始配置

    在这里插入图片描述

    1.1 安装配置

    git --version
    git config --global user.name yushengjun
    git config --global user.email xxx@163.com
    git config --global list 查看global下git的所有配置

    建Git仓库:

    1. 把已有的项目代码纳入Git管理
      进入项目代码所在的文件夹,git init
    2. 新建的项目直接用Git管理
      git init your_project 会在当前路径下创建和项目名称同名的文件夹

    1.2 基本命令

    Git命令 描述
    git add readme.txt 从工作区添加到暂存区
    git commit readme.txt -m ‘add readme.txt’ 将暂存区的改变提交到本地仓库
    git mv readme.txt readme.md 重命名文件,然后提交即可
    git rm readme.txt readme.md 从工作区和暂存区删除文件,然后提交即可
    git status 查看本地文件的状态(是否纳入管理,是否提交,是否修改等)
    git log 查看本地提交历史
    git log --oneline --all -n4 --graph oneline简略显示提交历史,all查看所有分支 ,n4最近4次的提交历史 graph 图形化查看
    gitk --all 打开图形化工具
    git checkout -b temp 732b217 从732b217 创建temp分支
    git branch -d test 删除test分支,注意要在别的分支下去删除test ;如果报错且确定可删除改为 -D(会忽略test分支某些更改还没merge到其他分支的情况)
    git branch -av 查看所有分支详细情况 带有*的表示是当前所在分支

    1.3 Git对象间的关系

    在这里插入图片描述
           每次提交,会生成一个commit对象指向一个tree对象(我理解tree是提交时所有文件的一个快照);tree按文件夹的结构来排列,每个文件夹又是一个tree,每个文件指向一个blob对象;注意blob对象和文件并不完全等价,Git认为即使文件名不同只要文件内容相同就是同一个blob,这样节省了存储空间。

    2. 常用操作

    2.1 HEAD

    会指向当前的分支 或者最新的提交
    分离头指针 指的是操作没有关联任何一个commit。

    2.2 修改提交信息

    git commit --amend 修改最近一次提交的message 会打开一个文档让你修改

    那么如何修改之前某次提交的message呢?
    git commit -i 77de453e 修改77de453e 之后的修改信息。把要修改的某次的提交的pick改为r保存,然后在弹出的对话框中修改提交message即可。

    ```
    pick 08c4cfa add index and
    pick 988098e update readme
    pick 8dc72e1 mv readme.md
    pick 3f79e47 delete
    
    # Rebase dde6fb8..f3482f6 onto dde6fb8 (5 commands)
    #
    # Commands:
    # p, pick = use commit
    # r, reword = use commit, but edit the commit message
    # e, edit = use commit, but stop for amending
    # s, squash = use commit, but meld into previous commit
    # f, fixup = like "squash", but discard this commit's log message
    # x, exec = run command (the rest of the line) using shell
    # d, drop = remove commit
    ```
    

    如何将多次提交合并为一次提交呢?
    同样的git commit -i 77de453e 使用s(use commit, but meld into previous commit)。注意要使用想要合并的提交的上一次提交。
    可以合并连续的commit,也可以合并不连续的commit

    2.3 比较工作区、暂存区、本地仓库之间的差异

    git diff --cached 比较暂存区和本地仓库之间的差异(因此文件必须先加到暂存区)
    git diff 是比较工作区和暂存区之间的差异,亦可以要比较的指定文件
    git diff temp master -- 1.txt 比较1.txt这个文件temp分支和master分支最新一次提交之间的差异。其实这里分支也指向提交,所以我们也可以比较不同commit之间的差异(换成commit的唯一标识值即可)。
    git diff HEAD HEAD~2 -- 1.txt 比较1.txt和前两次提交时的不同

    2.4 如何恢复暂存区和工作区的改变,甚至已经commit的内容?

    • 我们有时把文件加到暂存区后又想取消这次变更,怎么办呢?
      git reset head -- 2.txt 1.txt 把2.txt和1.txt恢复成head,也可以不指定文件即复原所有文件

    • 同样的如果我们想恢复工作区的内容和暂存区一样,怎么操作呢?
      git checkout 3.txt 恢复3.txt的内容和暂存区一样

    简单总结就是:恢复暂存区使用reset命令,恢复工作区内容使用checkout(注意这个命令比较危险,会丢失你在工作区做的变更!!)。而 git reset --hard HEAD 则就是将暂存区和工作区都恢复成最新一次提交的内容,这个比较常用

    • 如果进一步想消除最近的几次提交,即恢复本地仓库的内容到之前的某个版本该怎么办呢?
      git reset --hard 44f921d 恢复到44f921d 提交时的内容,此时head指针就会指向此次commit,44f921d 提交之后的提交都会消失,并且暂存区和工作区的内容都会复原。因此此命令是相当危险的!

    2.5 临时加塞紧急任务怎么办

    我们正在开发中,突然来了bug要修复,但是当前的变更又不想丢弃,这时可以先保存起来。
    git stash : stash会将变更添加到一个栈里,可以使用git stash list来查看。

    如果临时任务提交完又要回头来开发怎么办?
    这时可以使用git stash pop 或者git stash apply。这两个的区别就是pop 是会弹出并删除栈中的保存记录,apply只会取出保存的记录而不会删除。

    2.6 如何指定git忽略文件

    在.gitignore 文件中
    doc 指的是忽略doc文件或者doc文件夹下的内容
    doc/ 指的是忽略doc文件夹下的内容 ,而不忽略doc文件

    在window下需要先创建一个文件如1.txt,然后 ren 1.txt .ignore 来生成.ignore 文件。

    2.7 如何备份仓库

    从本地仓库,github,gitlab上复制仓库的方法为:
    git clone /user/git_learning 使用哑协议,传输速度不可见,且相较于智能协议更慢。
    git clone file:///user/git_learning 使用智能协议 传输速度可见,更快。

    http、https、ssh都是使用的智能协议。

  • 相关阅读:
    Java+Selenium——Timeout接口相关方法介绍
    Java+Selenium——截图方法TakeScreenshot——保存到桌面 +时间 ——保存到工程目录下面
    Java+Selenium——window接口相关方法介绍
    java下连接mysql数据库 ——删除语句——delete
    java下连接mysql数据库 ——插入语句——insert
    java下连接mysql数据库 ——更新语句——update
    java下连接mysql数据库 ——查询语句——select
    Java+Selenium——利用Javascript处理滚动条——利用webdriver执行脚本直接滚动到指定坐标位置
    Java+Selenium——利用POI读写excel文件(因环境此篇为参考)
    keyboard logger源代码
  • 原文地址:https://www.cnblogs.com/seasail/p/12179359.html
Copyright © 2020-2023  润新知