Git 基本操作集合

常用客户端:Gitkraken, Fork, Github 客户端

(一) Git 命令

1. 初始化 Git

  1. 进入到自己想创建版本库的目录

  2. 输入指令:

    git init
    

    的目录,这个目录就是Git用来跟踪管理版本库的。

3. 文件添加进远程代码库

  1. git add <文件名> 将文件名为filename的文件添加进仓库,可以多个文件名并列,用空格隔开
  2. 初次提交可以直接使用 git add . 将当前所有文件添加进仓库
  3. git commit -m "describe it" 将文件提交到本地分支仓库的操作,后面加的是日志。
  4. git add remote origin <远程仓库地址> 添加远程仓库地址
  5. git pull --rebase origin master 如果在远程仓库中创建了诸如 README.md 等文件,需要先进行这不操作,保证本地也同步到远程的文件
  6. git push -u origin master将本地代码推送到远程代码库

4. 提交和更新代码操作

  1. git add <文件名> 先把要更新的文件加入暂存区,,相应还有git add . (提交新文件和被修改文件,不包括被删除文件)、 git add --all (提交所有变化) 和 git add -u(提交被修改和被删除文件,不包括新文件)
  2. git commit -m "describe it" 提交到本地分支仓库
  3. git push -u <分支名> 推送到远程代码仓库
  4. git pull <远程主机名> <远程分支名>:<本地分支名> 更新代码,如果有冲突需要在本地提交

5. 日常模式总结

  1. 首先,用git push origin branch-name推送自己的修改;
  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
  3. 如果合并有冲突,则解决冲突,并在本地提交;
  4. 没有冲突或者解决掉冲突后,再用git push origin branch-name 再次推送
  5. 如果git pull提示 “no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name

6. 常用指令

  1. git status 可以随时仓库当前状态,查看已经命令过但还未经提交到仓库的所有操作,可以看成是待处理事项列表
  2. git diff 可以看到具体修改了哪些内容
  3. git log 查看对仓库的操作记录
  4. git rm 删除文件,如果确认删除,删除后需要进行 git commit -m "describe it" 操作,保证本地分支同步;如果需要回复删除文件需要用 git checkout -- 操作,从分支仓库中回复文件到暂存区
  5. git clone git@server-name:path/repo-name.git 从远程代码仓库克隆代码
  6. git branch 查看本地分支
  7. git branch -r 查看远程分支
  8. git branch <本地分支名> 创建本地分支
  9. git checkout <本地分支名> 切换到相应本地分支
  10. git branch -d <本地分支名> 删除分支
  11. git merge <本地分支名> 与当前分支进行合并
  12. git reset HEAD 取消缓存在暂存区的文件
  13. git tag 查看版本
  14. git tag <版本号> 创建新版本
  15. git tag -d <版本号> 删除版本

(二) Git 基本概念

1. 版本回退: git reset

  • 每一次commit都是对应一个版本
  • commit id是对版本的具体标识
  • HEAD表示当前版本
  • HEAD^表示上一个版本
  • HEAD^^表示上上版本
  • HEAD~100表示前100个版本
  • git reset --hard commitId 回退到版本号为commitId的地方,也可以用HEAD的形式表示。
  • 穿梭前,用git log查看提交历史,以便确定要回退到哪个版本。
  • 重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

2. 工作区和暂存区

  • 先上一张很经典的图

    Git 基本操作集合_第1张图片
    img

  • 工作区:就是我们在电脑中实际看到的;

  • 版本库:工作区中的隐藏目录.git,就是版本库;

  • 暂存区:暂存区的概念很重要,理解暂存区之后对于Git的版本管理会有一个比较清晰的思路。

  • master: 这是Git为我们自动创建的第一个分支。

  • 我觉得如果把工作区看成是键盘终端输入,版本库中的master可以看成是电脑硬盘,我们输入的内容首先是到缓存中的,并不是直接存入硬盘。当缓存区满或者人为发送指令时才会将缓存区的内容写入硬盘。

  • 以添加和文件修改为例,git add指令只是选中文件或者其他要提交的修改,将它们添加进暂存区。只有使用git commit指令的时候,才将暂存区的所有内容提交到当前分支。

(三) 分支管理

1. 分支需求描述

  • 不完整的改动可以先放到分支上,这样别人看不到分支的内容,不会相互影响。可以直到开发完毕后,再一次性合并到原来的分支上.
  • 一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点:
Git 基本操作集合_第2张图片
img

只有一条master时间线

2. 创建、合并和删除分支

2.1 原理

  • 创建新的分支:

    当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:

    Git 基本操作集合_第3张图片
    img

    创建新的分支dev

  • Git创建一个分支很快,增加一个dev指针,改改HEAD的指向. 从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变:

    Git 基本操作集合_第4张图片
    img

    对工作区的修改和提交

  • 合并分支:

    把dev合并到master上, 最简单的方法就是直接把master指向dev的当前提交,就完成了合并:

    Git 基本操作集合_第5张图片
    img

    合并分支

  • 删除分支:

    删除dev分支就是把dev指针给删掉,删掉后就剩下了一条master分支:

    Git 基本操作集合_第6张图片
    img

    删除分支

2.2 实战

  • take dev as an example
  • 创建分支: git branch dev
  • 切换到分支:git checkout dev
  • 创建+切换分支: git checkout -b dev
  • 查看当前分支:git branch
  • 切换到master分支:git checkout master
  • 合并指定分支到当前分支:git merge dev
  • 删除分支:git branch -d dev
  • git log --graph命令可以看到分支合并图。

3. 分支策略

在实际开发中,我们应该按照几个基本原则进行分支管理:

  1. master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;

  2. 干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

  3. 你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
    4.所以,团队合作的分支看起来就像这样:

    Git 基本操作集合_第7张图片
    img

    团队合作分支

4. Bug分支

  • 修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
  • 当工作没有完成时,先把工作现场git stash一下,然后去修复bug.
  • 修复后,再git stash pop,回到工作现场。
  • 要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。

5. 多人协作

5.1 基本命令

  • 当从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。

  • 要查看远程库的信息,用git remote

  • 显示更详细的信息, 用git remote -v

  • 推送分支: 就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:

    git push origin master  
    git push origin dev
    
    
  • 并不是一定要把本地分支往远程推送,master分支是主分支,因此要时刻与远程同步, 其他视情况而定.

  • git pull 抓取远程的新提交.

  • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

  • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name

你可能感兴趣的:(Git 基本操作集合)