git

0. 前言

1. 总体介绍

  • 在使用Git时,常用的分区有:
    • 工作区(Workspace):用户直接操作的的文件。
    • 暂存区(Index / Stage):在./.git/index/路径中,包含add/rm后、commit前暂存的数据。
    • 本地仓库(Repository):在./.git/路径中,包含之前版本的信息。
    • 远程仓库(Remote):
  • 盗用《阮一峰 - 常用 Git 命令清单》中的图。
    image_1dfl5f0oqecf1vjndr51cb71efc9.png-55.3kB

2. 常用命令

2.1. 基本操作

  • 新建本地仓库:在新建好的文件夹目录下运行 git init
  • 克隆仓库:git clone xxx
  • 查看当前状态:git status

2.2. 工作区、暂存区、本地仓库

  • 从工作区到暂存区:add/rm/mv 命令
    • git add [file1] [file2] ...
    • git add [dir]
    • git add .
    • git rm [file1] [file2] ...
    • git mv [file-original] [file-renamed]
  • 从暂存区到工作区:
    • git reset HEAD <filename>
      • 暂存区中将撤销对应修改,工作区中有等待提交的内容。
      • 工作区中,若对应文件没有任何修改,则将暂存区中的修改更新到工作区中。
      • 工作区中,若对应恩建有修改,则不会将暂存区中的修改更新到工作区中。
      • 总的来说,一般会导致工作区中有等待提交的修改
    • git checkout -- <filename>
      • 这种方法是将暂存区或本地仓库中的内容更新到工作区中,也就是撤销工作区中的更新。
      • 若暂存区中有等待commit的内容,则会将本地工作区中的内容改变为暂存区中的内容。
      • 若暂存区中没有数据,则会将本地工作区中内容改变为最新commit的内容。
      • 总的来说,一般会导致工作区中没有需要提交的内容
  • 从暂存区到本地仓库:commit 命令
    • git commit -m [message]
    • git commit [file1] [file2] ... -m [message]
  • 从本地仓库到暂存区
    • git reset --soft xxx
    • 注意,该命令是撤销 commit,但保留该commit中修改的暂存区信息。
  • 从本地仓库到工作区:
    • 从暂存区到工作区 中相同的 git checkout -- <filename>
    • git reset --hard HEAD^
      • 该命令可以在改变本地仓库的同时,改变工作区内容。
      • 将工作区内容改变为指定版本的本地仓库内容。
      • 工作区中没有需要提交的内容

2.3. 本地仓库与远程仓库

  • 从本地仓库到远程仓库:push 命令。
  • 从远程仓库到本地仓库:clone/fetch 命令。
    • pull命令既把远程仓库的内容更新到本地仓库中,又把远程仓库的内容更新到工作区中。

2.4 分支

  • 分支基本操作:
    • 查看本地分支:git branch
    • 新建本地分支:git branch new_branch_name
    • 选择本地分支:git checkout new_branch_name
    • 新建分支并选择:
      • git checkout -b new_branch_name
      • 等价于两条命令:git branch new_branch_name, git checkout new_branch_name
    • 查看本地与远程分支:git branch -a
    • 删除本地分支:git branch -d new_branch_name
  • 简单合并:
    • 在branch1执行命令git merge branch2,意思是在branch1的基础上,合并branch2。
    • 如下图(盗用这里的图),如果branch1是下图中的master,branch2是下图中的dev,则可以直接合并。
      image_1dfofv0091o9m1rbb1iis18q61ihe9.png-11.1kB
  • 冲突处理:
    • 如下图(盗用这里的图),如果在master中执行git merge feature1,则会提示文件存在冲突,需要手动处理。
    • 手动处理后,需要重新add文件并commit。
      image_1dfog14vp1i301bl91g1b1inlq14m.png-13.6kB
    • 举一个例子说明冲突文件的形式:
      • =======前是master分支,后面是feature1分支。
      • 在VSC中也可以轻松处理。
        image_1dfog7bt815vh11kh1q4811f21mc313.png-14.5kB
        1
        2
        3
        4
        5
        6
        7
        <<<<<<< HEAD
        first line line
        second line
        =======
        first line
        second line line
        >>>>>>> feature1

2.5. 堆栈

  • 作用:当突然有事情,需要临时保存工作区和暂存区的数据保存。
  • 常用命令:
    • git stash:将工作区和暂存区的数据保存到堆栈中。
    • git stash pop:将堆栈中的数据恢复到工作区中。
    • git stash list:堆栈清单。

3. 碰到的一些实际情况

3.1. folk后更新最新代码

  • 方法一 - Github中鼠标操作
    • 点击folk库中的 new pull request。
      image_1dg44rn191a7s1eoc70jtd0kjp9.png-46.3kB
    • 左边改为folk的结果,右边改为原始github repo,然后点击 create pull request。
      image_1dg44u5lhlns142e1cv01cfi6f61j.png-47.6kB
    • 最后 create pull request 即可。
      image_1dg44vpprnm51c3410rovgn170d20.png-78.3kB
  • 方法二 - 命令:
    • git remote add upstream <original repo url>
    • git fetch upstream
    • git merge upstream/master
    • git push origin master