git

 

git 基本功


获取 git 仓库

  • 普通目录转换为仓库
    cd ...
    git init
    

      

  • 获取现有的仓库
    git clone git@gitee.com:argor/great.git
    git clone git@gitee.com:argor/great.git mygreat

      获取现有仓库时,可以为仓库设定新的目录名【默认为 great】:mygreat。

 

更新到仓库

  • 检查当前库的文件状态
    git status
    git status -s

     

  • 添加新的跟踪文件
    git add hello.txt
    git *
    

      可以指定跟踪某个确定的文件,也可以一次性全部添加。

  • 暂存修改的文件
    git add hello.txt
    

      已经暂存过的文件,在修改后需要再次暂存。

  • 查看已暂存和未暂存的修改
     git diff
    warning: LF will be replaced by CRLF in hello.txt.
    The file will have its original line endings in your working directory
    diff --git a/hello.txt b/hello.txt
    index b1a7984..8d0e412 100644
    --- a/hello.txt
    +++ b/hello.txt
    @@ -1 +1 @@
    -hello git.
    +hello git
    

      暂存过文件 hello.txt 后重新修改,对比暂存后未暂存的文件差异【行末删除了英文句号】。

  • 提交更新
    git commit
    

      
    跳过暂存,直接提交

    git commit -a
    

      a 选项使本次提交包含了所有修改过的文件。

  • 移除文件
    # 同时移除文件清单和文件系统上的文件
    git rm hello.txt
    
    # 暂存区文件,使用 -f 选项
    git rm -f hello.txt
    
    # 仅在 git 仓库中移除,保留文件系统文件
    git rm --cached hello.txt
    

      

  • 移动文件
    git mv hello.txt Hello.java
     
    # 在 git 下使用 mv 等同于如下一组命令的效果
    mv hello.txt Hello.java
    git rm hello.txt
    git add Hello.java
    

      

 

查看提交历史

  • 最近的提交会显示在最上边
    git log
    
    git log --pretty=oneline
    

      

     

撤销操作

  • 撤销操作是不可逆的。
  • 撤销提交注释
    # 撤销操作,会把暂存区重新提交。暂存区空,会修改 提交message。
    git commit --amend
    

      暂存区空时,等于修改了上次提交的注释信息。

  • 取消暂存的文件

    git reset HEAD hello.txt
    

      

  • 撤销对文件的修改 
    git checkout hello.txt
    

      hello.txt 还原到之前提交时的状态。

 

 

远程仓库的使用

  • 查看远程仓库
    $ git remote
    origin
    
    $ git remote -v
    origin  git@gitee.com:argor/great.git (fetch)
    origin  git@gitee.com:argor/great.git (push)
    

     
    查看某个具体的远程仓库信息

    git remote show origin
    

      

     

  • 从远程仓库中抓取&拉取
    git fetch pb
    # 下载远程仓库所有的数据到本地仓库;
    

      

  • 推送到远程仓库
    git push origin master
    # 推送master 到 origin;
    

      

  

打标签

  • Git 允许为仓库历史中的某一次提交打上标签 
  • 列出标签
    $ git tag
    v1.0.0
    v1.1.0
    v1.2.0
    v1.2.1
    
    $ git tag -l *1
    v1.2.1
    # 使用通配符时,选项必选
    

      

  • 创建标签
    git 支持两种标签:轻量标签、附注标签*。

  • 附注标签
    $ git tag
    
    $ git tag -a v0.1
    
    $ git tag
    v0.1
    
    # tag命令的 a 选项用来创建附注标签。
    

      
    查看标签信息

    $ git show v0.1
    tag v0.1
    Tagger: argor <15389222587@qq.com>
    Date:   Fri May 7 20:26:33 2021 +0800
    
    v0.1
    
    commit bb5156fe4dd9f3a8d3eed415f40716d4a3f8856b (HEAD -> dev, tag: v0.1)
    Author: argor <15389222587@qq.com>
    Date:   Thu May 6 17:50:07 2021 +0800
    
        commit
    
    diff --git a/hello.txt b/hello.txt
    new file mode 100644
    index 0000000..8d0e412
    --- /dev/null
    +++ b/hello.txt
    @@ -0,0 +1 @@
    +hello git
    

      

  • 轻量标签
    无须选项,直接写标签名即可。
    $ git log --pretty=oneline
    bb5156fe4dd9f3a8d3eed415f40716d4a3f8856b (HEAD -> dev, tag: v0.1) commit
    3c0a9979b82aec0bbc23879b6a8dcf01ecf8fba1 lklj
    4ff7a382f526fafd6b78a4d66663c039fb8e85c9 add Java code
    5688fa6278a90163ea066dcb3fe22c268b922e25 (tag: v0.0.6) hello
    ab62d8c2fee1bc4560fec6df7d030606659fadad (origin/master, origin/HEAD, master) Initial commit
    
    argor donatello@argor MINGW64 /e/tmp/git/test/great (dev)
    $ git tag v0.0.8 4ff7a382f52
    
    argor donatello@argor MINGW64 /e/tmp/git/test/great (dev)
    $ git log --pretty=oneline
    bb5156fe4dd9f3a8d3eed415f40716d4a3f8856b (HEAD -> dev, tag: v0.1) commit
    3c0a9979b82aec0bbc23879b6a8dcf01ecf8fba1 lklj
    4ff7a382f526fafd6b78a4d66663c039fb8e85c9 (tag: v0.0.8) add Java code
    5688fa6278a90163ea066dcb3fe22c268b922e25 (tag: v0.0.6) hello
    ab62d8c2fee1bc4560fec6df7d030606659fadad (origin/master, origin/HEAD, master) Initial commit
    

      



  • 后期打标签
    $ git log --pretty=oneline
    bb5156fe4dd9f3a8d3eed415f40716d4a3f8856b (HEAD -> dev, tag: v0.1) commit
    3c0a9979b82aec0bbc23879b6a8dcf01ecf8fba1 lklj
    4ff7a382f526fafd6b78a4d66663c039fb8e85c9 add Java code
    5688fa6278a90163ea066dcb3fe22c268b922e25 hello
    ab62d8c2fee1bc4560fec6df7d030606659fadad (origin/master, origin/HEAD, master) Initial commit
    
    argor donatello@argor MINGW64 /e/tmp/git/test/great (dev)
    $ git tag -a v0.0.6 b922e25
    fatal: Failed to resolve 'b922e25' as a valid ref.
    
    argor donatello@argor MINGW64 /e/tmp/git/test/great (dev)
    $ git tag -a v0.0.6 5688fa627
    
    # 指定提交的校验和。
    # 取首不取2尾。
    

      

  • 共享标签
    通过 git push 不会联通本地仓库的标签一起提交。
    需要远程库也打上标签,必须显示推送。
    $ git push origin v0.0.6
    
    # 允许一次传输多个标签,需要带上选项
    $ git push origin --tags
    

      虽然推送标签需要显示操作,获取却不需要。

  • 删除标签
    $ git tag -d v0.0.6
    # 删除本地标签
    
    $ git push origin --delete v0.0.6
    # 删除远程库标签
    

      

  • 检出标签
    # 检出标签
    $ git checkout 
    
    # 通过 git status 可以查看当前标签信息。
    

      

Git 别名 

  • 为命令取别名,例如为 commit 取个别名:ci。 

 

  

 

git 分支


分支简介

  • 分支简介
    git 每次提交的是文件的快照,既不是文件的变化也不是差异。
    暂存(git add)操作会为文件计算校验和,然后保存文件的快照到 git 仓库。
    提交(git commit)的时候,把计算的校验和提交到 git 仓库。

  • 查看分支
    查看都有哪些分支
    $ git branch -a
    * master
      remotes/origin/HEAD -> origin/master
      remotes/origin/lsj
      remotes/origin/master
      remotes/origin/rk
  • 分支创建
    $ git branch dev
    # 此时 Git 创建了一个指针。
    # 创建分支,并不会切换分支。
    # Git 中使用了一个特殊指针 HEAD,表示当前的本地分支。
     
    $ git push --set-upstream origin dev
    # 通常分支的创建删除都是在本地库操作。
    

      

  • 分支切换
    切换分支,使用 checkout 命令。
    $ git checkout testing
    

      Git 允许在不同分支间来回切换,独立工作,还可以进一步合并分支。(branch、checkout、commit)
    Git 中创建一个分支的空间开销,41个字节(40个字符 & 一个换行符)。
    Git 创建分支,合并分支,因为实现上仅仅是个指针,所以十分高效。

分支的新建与合并

  • 分支创建与合并的例子解释
    分支的创建、合并,步骤如下:
        1.开发一个具体用户的项目;
        2.为满足一个新的需求,创建一个分支;
        3.开始新需求的实现;

    开发过程中,出现了一个紧急事件。(项目运行时,常常消耗cpu到100%)
        1.切换到出问题的分支;
        2.创建新的分支,切过去;
        3.修复她;
        4.测试通过后,切回出问题原始分支,合并到出问题的分支;

  • 合并分支
    # master 合并 dev。
    git checkout master
    git merge dev
    

      
    合并后删除分支

    git branch -d dev
    git push origin --delete dev
    # 通常分支的创建和删除都是在本地仓库进行。
    

      

  • 遇到冲突时的分支合并

Gitee.com


 

  

 

 

 

一切代码都是为了生活,一切生活都是调剂
原文地址:https://www.cnblogs.com/argor/p/14734651.html