Git高频操作|集创考核第1篇笔记

109 阅读5分钟

Git

  • 说明:繁琐的配置我就省去了。这里主要记录一些高频操作。
  • git clone 从远程仓库克隆:git clone + 远程仓库地址

工作目录、暂存区以及版本库概念

版本库:前面看到的.git隐藏文件夹就是版本库,版本库中存储了很多配置信息、日志信息和文件版本信息等。

工作目录(工作区):包含.git文件夹的目录就是工作目录,主要用于存放开发的代码。

暂存区:.git文件夹中有很多文件,其中有一个index文件就是暂存区,也可以叫做stage。暂存区是一个临时保存修改文件的地方。

本地仓库操作

  • .gitignore 配置忽略提交

  • git status 查看文件状态, git status –s 使输出信息更加简洁

  • git add 将未跟踪的文件加入暂存区

    • git add [file1][file2]...
    • git add [dir]
    • git add .
  • git reset 将暂存区的文件取消暂存

  • git commit 将暂存区的文件修改提交到本地仓库

    • git commit -m "详细信息",详细信息要求颗粒度小,使用专业开发术语
      • 1 file changed:1个文件被改动。
      • 0 insertions:没有新增内容变化。
      • 0 deletions:没有删除内容变化。
  • git rm 删除文件

    • 上面删除的只是工作区的文件,需要提交到本地仓库
  • git log 查看日志记录

    • 加上--pretty=oneline参数可以精简输出信息
  • git fetch 强制拉取

    git fetch --all
    git reset --hard origin/branch-name
    git pull
    
  • git revert 本地回滚然后提交

    git revert -n <commitId>
    

    找不到新版本的commit id怎么办? >Git 提供了一个命令git reflog用来记录你的每一次命令,当你用git reset --hard HEAD^回退到wrote a readme file版本时,再想恢复到add distributed,就可以通过git reflog命令找到add distributed的commit id。

    git 中关于撤销以及删除文件的不同场景

      >场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file
    
      >场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD ,就回到了场景1,第二步按场景1操作
    
      >场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,可以用命令git reset --hard commit_id,不过前提是没有推送到远程库
      
    

远程仓库操作

  • git remote 查看远程仓库

    如果想查看已经配置的远程仓库服务器,可以运行 git remote 命令。 它会列出指定的每一个远程服务器的简写。如果已经克隆了远程仓库,那么至少应该能看到 origin ,这是 Git 克隆的仓库服务器的默认名字。

    $ git remote
    origin
    
    $ git remote -v
    origin + URL (fetch)
    origin + URL (push)
    
    $ git remote show origin
    * remote origin
      Fetch URL: 
      Push  URL: 
      HEAD branch: main
      Remote branch:
        master tracked
      Local branch configured for 'git pull':
        master merges with remote master
      Local ref configured for 'git push':
        master pushes to master (fast-forwardable)
    
  • git remote add 添加远程仓库

    运行 git remote add 添加一个新的远程 Git 仓库,同时指定一个可以引用的简写

    $ git remote add origin2 + 仓库地址
    /*查看*/
    $ git remote -v
    origin  仓库地址(fetch)
    origin  仓库地址 (push)
    origin2 仓库地址 (fetch)
    origin2 仓库地址 (push)
    
  • git clone + URL 从远程仓库克隆

  • git remote rm 移除无效的远程仓库

    此命令只是从本地移除远程仓库的记录,并不会真正影响到远程仓库

    $ git remote add origin2 + 仓库地址
    /*查看*/
    $ git remote -v
    origin  仓库地址(fetch)
    origin  仓库地址 (push)
    origin2 仓库地址 (fetch)
    origin2 仓库地址 (push)
    /*删除*/
    $ git remote rm origin2
    /*查看*/
    $ git remote -v
    origin  仓库地址(fetch)
    origin  仓库地址(push)
    
  • git fetch 从远程仓库中抓取与拉取

    git fetch 是从远程仓库获取最新版本到本地仓库,不会自动merge

    $ git fetch origin main
    remote: Enumerating objects: 5, done.
    remote: Counting objects: 100% (5/5), done.
    remote: Compressing objects: 100% (3/3), done.
    remote: Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
    Unpacking objects: 100% (3/3), done.
    
  • git pull 是从远程仓库获取最新版本并merge到本地仓库。修改远程仓库的文件,然后git pull。

    $ git pull origin master
    1 file changed, 1 insertion(+), 4 deletions(-)
    

    注意:如果当前本地仓库不是从远程仓库克隆,而是本地创建的仓库,并且仓库中存在文件,此时再从远程仓库拉取文件的时候会报错(fatal: refusing to merge unrelated histories ),解决此问题可以在git pull命令后加入参数–allow-unrelated-histories

  • git push [remote-name] [branch-name] 推送到远程仓库

git分支

  • git branch 查看分支

    # 列出所有本地分支
    
    $ git branch
    
    # 列出所有远程分支
    
    $ git branch -r
    
    # 列出所有本地分支和远程分支
    
    $ git branch -a
    
  • git branch [branch name] 创建分支

    $ git branch dev
    $ git branch
          dev
        * main
    
  • git checkout 切换分支

    下载远程分支为本地分支: git checkout -b

        git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
    
        git branch dev
        git checkout dev
    
  • git push推送至远程仓库分支

git merge 合并分支

  • git merge 命令用于合并指定分支到当前分支。

  • git branch -d [branch name] 删除分支

    如果要删除远程仓库的分支,可以使用git push origin -d branch

  • 领先的分支合并

    在创建了dev新分支后,main分支没有再进行过commit,而新的分支在main第一次commit的基础上进行了第二次commit。这时候我们称dev分支与main分支相比是领先(ahead) 的,所以在merge的时候直接保留了dev分支上也就是第二次commit的数据。

  • 并行的分支合并

    当修改了同一个文件的同一个位置时,往往在合并时会报错,提示在合并的时候出现了冲突,需要我们手动解决。报错内容如下:

    Auto-merging demo.java 
    CONFLICT (content): Merge conflict in demo.java
    Automatic merge failed; fix conflicts and then commit the result.
    

    这时候我们打开demo.java 文件,可以发现Git工具帮我们把merge时冲突的内容用一些分隔符号分割出来了。这时候手动修改文件的内容来达到你想要的样子。这里我删掉dev分支下的修改,只留下main中修改的内容。修改完成后保存文件,回到Git中输入下面的指令提示Git你已经手动合并完成:     

    git commit -a
    

    此时会弹出一大堆五颜六色的东西,这个是提示你往里面输入你手动merge的时候是怎么样修改的。 但是我们这里可以不管,直接按Esc键后用英文输入法输入冒号再输入wq两个字符,回车即可完成conflict的手动merge。