• git简单使用


    git

    分为本地仓库和远端仓库;
    整个本地仓库的一个版本分为三个阶段:workspaceindexrepositorygit commit就是向repository中添加了一个新的版本,然后reset的时候,--hard--mixed--soft分别对应恢复到目标版本的那个阶段。
    对于--soft,多个版本之间直接reset,index会将中间版本进行合并。
    数据状态的变化是修改操作导致的,不同版本之间存储的是修改的信息,通过这些修改的信息不断进行效果叠加最终成为了当前的状态;
    使用git的时候,涉及到版本的,一般都需要先进行一次commit,然后再进行操作,如checkout、reset。

    配置

    • 设置当前仓库的用户名和用户邮箱
      git config user.name "userName"
      git config user.email "email"
    • 设置全局的用户名和用户邮箱
      git config --global user.name "userName"
      git config --global user.email "email"
    • 查看配置
      git config -l对应仓库的config文件
      git config --local -lC:\Users\lisiw\.gitconfig

    裸仓库(中心仓库)

    使用–bare参数初始化的仓库,这种仓库并不包含工作区(内部没有代码)所以也就不存在在裸仓库上直接提交变更的情况,也不能在这个目录下执行一般的git命令。
    一般情况下裸仓库是作为远端的中心仓库使用的。

    初始化

    git init --bare

    远端仓库操作

    操作关系

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sUFnZ8Yr-1659176467846)(./images/operator.png)]

    clone

    git clone 用户名@ip:/path/to

    add restore

    • git add files
      添加文件到暂存区。
    • git restore -S files
      取消暂存区中的文件
    • git ls-files -c
      查看暂存区中数据

    commit reset

    • git commit files -m "commits"
      将待提交信息提交到本地仓库。
    • git reset hash
      切换到指定版本
      • git reset --soft head~1
        回退commit信息,不会恢复index级别
      • git reset --mixed head~1 – 默认方式
        回退commit和index信息,源码保留(不重置workspace)
      • git reset --hard head~1
        全部回退,源码也会恢复到指定版本。
      • ~^都是表示前面的版本:
        head~ / head^ 当前head前一个版本
        head~2 / head^2 当前head前2个版本

    远端和本地

    push

    将本地版本推送到远端,在推送之前如果远端版本发生了改变(其他本地进行了push),那么需要使用pull来先拉取一下,如果有冲突的话需要进行处理,处理完毕后在commit一个本地版本,再进行push。

    git push origin master
    origin -- 要push的位置
    master -- 分支
    
    • 1
    • 2
    • 3

    push提交到远端之前先git pull origin master一下,此时会根据远端代码标注当前代码的冲突区域,人工查看远端和当前代码有什么不同,处理冲突之后,使用git add .git commit -m "merged"提交新的版本。

    pull

    将远端版本拉取到本地,如果有冲突会进行标注。

    log

    git log --oneline --graph
    git log可以显示所有提交过的版本信息,不包括已经被删除的 commit 记录和 reset 的操作

    • commit
      是个SHA1计算出来的哈希值,就是用于描述对应的提交版本。
    • HEAD
      当前最新提交的指针
    • master
      所处分支

    git reflog
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wBtDdRc0-1659176467850)(./images/reflog.png)]
    对应版本后面的命令是导致切换到对应版本的指令,就是说执行对应指令后切换到对应版本的。
    git reflog是显示所有的操作记录,包括提交,回退的操作。一般用来找出操作记录中的版本号,进行回退。
    git reflog常用于恢复本地的错误操作。

    branch

    git branch
    可以查看分支

    整理版本

    • git commit -amend
      用于将当前的index数据commitrepository中:适用的场景就是说如果版本进行了一些修改,然后将这些修改add到了index中,此时如果想要保存一个版本,一种方法就是commit一次,如果不希望多出来一个版本,那么就可以使用这个指令将index修改的信息commit到当前最近一次的本地仓库版本中。

      git commit --amend                            # 进入交互模式修改
      git commit --amend -m 'new commit message'    # 直接修改上一次 commit
      
      • 1
      • 2

      注意:

      1. 这是用一个新的 commit 来替换掉原来的 commit,所以 commit ID 会发生变化。
      2. 不要修改已经 push 的 commit,除非你是在自己的分支
    • git rebase -i
      整体就像是个脚本,根据不同指令处理不同版本;不同版本之间存储的是修改的信息;
      用于本地仓库不同版本的整理,可以合并选中的提交范围;注意:rebase之后,如果内部有p指令,那么会将当前版本指向该commit,因此,一般使用该指令的时候会将end-commit设置为当前版本

      commit4
      commit3
      commit2
      commit1
      
      git rebase -i commit1~ commit3
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

      使用交互式rebase可以细致的操作每一条commit,这样就可以合并修改commit:

      # 多次commit
      # (start-commit, end-commit] 前开后闭区间,默认 end-commit 为当前 HEAD
      git rebase -i [start-commit] [end-commit] -- commit^ 前一个版本   commit~后一个版本
      
      • 1
      • 2
      • 3

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zMsRWGWP-1659176467851)(./images/rebase.png)]

      commands :
      p, pick = use commit # 保留这个 commit,并将当前版本选择这个版本
      r, reword = use commit, but edit the commit message # 修改 message message
      e, edit = use commit, but stop for amending # 停下来,修改内容,修改完毕后先`add commit`,然后`git rebase --continue`
      s, squash = use commit, but meld into previous commit # 合并对应版本到上一个版本
      f, fixup = like "squash", but discard this commit's log message # 合并且抛弃 message
      d, drop = remove commit # 抛弃这个 commit
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 文件冲突
        当多个版本合并的时候,可能会出现不同版本文件冲突的问题,此时需要手动处理这些冲突,然后将解决冲突后的文件commit到对应的版本,接着继续rebase:
        解决冲突:
        <<<<<<< HEAD
        ...
        =======
        ...
        >>>>>>> ae9a0f6
        注意上面这个版本,head是当前版本,但他又不是传统意义上的当前版本,这个版本和rebase指定操作pick指令相关,并不是调用rebase时对应的版本;
        整体描述了冲突,等号前半部分的数据就是造成冲突时版本的数据,等号后面后半部分就是造成冲突后面版本的数据。
        
        git add .
        git commit --amend
        git rebase --continue
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12

    分支

    查看分支

    git branch -a – 查看远端和本地所有分支
    git branch -l – 查看本地分支

    创建分支

    git branch branchName f5e86fbf455960c40e759c48bb0675b54d808611
    可以从指定版本创建分支,没有指定的话就从当前最新的commit版本进行创建分支。

    删除分支

    git branch -d branchName

    切换分支

    git checkout branchName – 切换分支
    git checkout -b branchName – 创建并切换分支,如果存在就失败

    合并分支

    git merge branchName
    将branchName分支合并到当前分支,如果出现冲突,git会将出现冲突的文件都标注出来,然后需要手动处理这些冲突;
    出现冲突手动处理完毕后就再commit一个版本,此时就认为已经merge完毕了对应的分支。

    重命名分支

    git branch -m oldName newName

    忽略提交

    在git目录下编辑.gitignore文件,该文件也需要进行git同步:

    *.exe
    
    • 1

    检查忽略提交

    查看.gitignore中那条规则忽略了fileName的git管理:
    git check-ignore -v fileName

    checkout和reset

    checkout和reset有区别:
    checkout是将head指针移动到分支的最新的commit版本(对应的workspace、index、read都指向该版本),reset是将对应分支直接指向对应的分支上。
    另外checkout在进行分支切换的时候,如果发现文件在当前版本上进行了修改,那么checkout不会对该文件进行替换,而reset --hard会。测试发现有的时候会直接abort,总之,在进行版本操作的时候最好commit之后再进行处理。

    error

    push error

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zCgV7mtZ-1659176467853)(./images/gitError1.png)]
    这个异常就是别人进行了push,而本地仓库从远端仓库pull时的版本过期,因此需要先pull远端仓库,将远端的合并到本地的才可以进行push。

    github

    创建仓库

    添加远程仓库
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OVL9yghR-1659176467854)(./images/githubaddrep.png)]

    ssh

    添加ssh的方法:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jm7jI6om-1659176467855)(./images/addssh.png)]

    在github上创建一个仓库,然后

    gitee

    新建仓库

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z8vkZWjb-1659176467856)(./images/giteenewrep.png)]

    ssh

    添加ssh的方法:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ixY7taov-1659176467858)(./images/giteeaddssh.png)]

  • 相关阅读:
    按键引发的显示问题
    防抖(debounce)与节流(throttle)函数的应用
    Python 检测网络是否连通
    vue - vue基础/vue核心内容(2)
    c语言如何设置随机数
    ssm中项目异常处理
    MyBatis Plus复合主键问题解析
    Python 操作redisearch
    数字转型新动力,开源创新赋能数字经济高质量发展
    Qt EventLoop使用原理
  • 原文地址:https://blog.csdn.net/lswdcyy/article/details/126075917