git 学习笔记

分布式版本控制系统

客户端并不只是提取最新版本的文件快照,而是把代码仓库完整地镜像下来。

git的一些常用指令

  • git diff // 比较工作目录中当前文件和暂存区域快照的差异,即修改后还没有暂存起来的变化内容
  • git diff --staged // 暂存起来的文件和上次提交时快照之间的差异
  • git status
  • git commit // 提交到暂存区
  • git commit --amend // 修改最后一次的提交
  • git commit -a // =git add + git commit
  • git rm // 移除文件
  • git log // 查看提交历史
  • git remote // 查看当前的远程库
  • git fetch // 从远程仓库中拉取本地仓库没有的数据,并不自动合并到当前工作分支
  • git pull // 将远端分支自动合并到本地仓库中当前的分支

git分支

在git中提交,会保存一个提交(commit)对象,该对象包含一个指向缓存内容快照的指针,包含本次提交的作者等相关的附属信息,包含零个或多个指向该提交对象的父对象指针:首次提交是没有直接祖先的,普通提交有一个祖先,由两个或多个分支合并产生的提交则由多个祖先。

git中的分支,其实本质上仅仅是个指向commit对象的可变指针。git会使用master作为分支的默认名字。在若干次提交后,你其实已经有了一个指向最后一次提交对象的master分支,它在每次提交时都会自动向前移动。

创建一个新的分支: git branch [branchName]

创建了一个新的分支后不会自动切换到这个分支中,需要执行: git checkout [branchName]

也可以将创建新分支和切换到新分支合并成一条指令完成: git checkout -b [branchName]

分支的新建与合并

现在要将hotfix的内容合并到master上来,需要执行:

git checkout master

git merge hotfix

合并时会出现Fast forward的提示,由于当前master分支所在的提交对象是要并入的hotfix分支的直接上游,git只需把master分支指针直接右移。这种单线的历史分支不存在任何需要解决的分歧,所以这种合并过程可以称为快进。

合并后,可以将hotfix分支删除: git branch -d hotfix

如果现在要将iss53合并到master分支上:

需要执行:
git checkout master

git merge iss53

由于当前master分支所指向的提交对象(C4)并不是iss53分支的直接祖先,git会用两个分支的末端(C4和C5)以及他们的共同祖先(C2)进行一次简单的三方合并计算。

遇到冲突时的分支合并

如果在不同的分支中都修改了同一个文件的同一个部分,git就会无法干净地把两者合在一起。git作了合并,但没有提交,它会停下来等你解决冲突。要看哪些文件在合并的时候发生冲突,可以用git status来查阅。

任何包含未解决冲突的文件都会以未合并(unmerged)的状态列出。

可以将里面的内容进行人工修改。在解决所有文件里所有冲突后,运行git add将把它们标记为已解决状态。然后可以用git commit来完成合并提交。

分支的管理

git branch // 给出当前所有分支的清单,分支名字前的*表示当前所在的分支。

若要查看各个分支最后一个提交对象的信息,运行git branch -v。

要从该清单中筛选出你已经(或尚未)与当前分支合并的分支,可以用--merge和--no-merged选项。

posted @ 2019-08-26 22:53  simple小前端  阅读(163)  评论(0编辑  收藏  举报