jinzhe

jinzhe

github
email

Git入门

Git 是一种分布式的版本控制系统。

Note

- 版本控制,顾名思义可以记录历史,并在需要时回退.
- 分布式的概念是多了一个本地仓库,每一个本地仓库都存在所有的版本,过程中无需联网提交(但是到最后还是要把代码提交到中央仓库)。

add#

add 的作用是把工作区改变的代码提交到暂存区,以监听文件内部的改变

git add <>

文件状态由 “未跟踪” 变成 “已暂存

Warning

add 添加的为文件改变而非文件本身!

快速 add#

暂存所有文件

git add .

commit#

commit 的作用是将暂存区的代码提交到本地仓库

git commit

快速 commit#

git commit -m <提交信>

push#

将本地提交到远程仓库,本质其实是将当前的分支连同它路径上的commit一并提交到远程仓库

git push <主机> <分支>

快速 push#

提交本地所有分支。

 git push

log#

commit 完成之后你你就成功完成了一次提交,现在查看一下刚刚提交的 commit ,这里记录了 commit 的 SHA-1,提交的作者,提交时间

git log

查看内容变动的 log#

显示详细的文件内容变动。

git log -p

查看简单的 log#

只显示文件变化统计。

git log --stat

show#

只查看当前 commit 信息#

git show

查看某一条 commit 信息#

git show SHA-1

查看某一条 commit 信息中的文件#

git show SHA-1 <>

pull#

git pull 其实是 git fetchgit merge 的集合,
拉取目标 branch 的所有 commit 和当前的 commit 合并生成一个新的 commit。

git pull <主机> <分支>

pull 操作在一定程度上会帮你自动合并:

  • 如果一个分支改了 A 文件,另一个分支改了 B 文件,合并之后两个文件都会改。
  • 如果一个分支改了 A 文件第一行,另一个分支改了 A 文件第二行,合并之后 A 文件第一行和第二行也都改了。
  • 是如果一个分支改了 A 文件第一行,另一个分支也改了 A 文件第一行,这就出问题了,需要手动解决一下冲突。

冲突解决完毕之后需要重新 add、commit,这个时候发现 git 会自动帮我们填好了 log 信息,提交就可以。

branch#

git 和其他版本控制系统的主要区别就是 git 有branch的概念,意思翻译为分支,实质为 commits 的引用。

引用相当于 commit 的快捷方式,我们看到每一个commit都有一个 SHA-1 的加密值,这个值重复率极低,低到我们可以用前几个值来代替,比如我们可以用7800ba来代表上一次的 commit,后面的HEAD -> mastergithub/master也是指向这个 commit 的引用。

HEAD:当前分支的引用#

当前分支的引用指的是当前工作目录对应的commit,当你有提交的时候,HEAD 也会自动指向当前的commit。总之,当前commit在哪里,HEAD就在哪里,你永远可以用HEAD来操作当前commit

branch:分支#

HEAD除了可以引用commit,也可以引用一个branch,在指向branch的时候,间接的指向了对应的commit,当前分支被提交的时候,HEAD拉着对应的branch一起移动。

main:默认 branch#

main 分支是项目在被 clone 下来的时候默认创建的。

Note

所有的 branch 都是平等的。

branch 的操作#

创建 branch#

git branch <分支>

切换 branch#

git checkout <分支>

这样是不是有点麻烦,我们可以把两步合在一起:
创建一个分支并立即切换过去。

git checkout -b <分支>

删除 branch#

git branch -d <分支>

Note

- 删除时要切换到其他 branch 进行删除
- 删除 branch 只是删除对 commit 的引用,所在 branch 的提交并没有删除
- 没有合并过 master 的分支删除失败(出于安全考虑),换成大写-D就可以了

工作流 Branching#

市面上最流行的工作流

  1. 假如有一个项目需要你开发功能,于是你在项目上新建了一个分支
git checkout -b zhang
  1. 开发完毕之后你可以推送到远程分支上去:
git add .
git commit -m "开发完成"
git push origin zhang
  1. 然后你告诉同事说可以 review 一下你的代码,同事说可以,所以你同事就:
git pull
git checkout zhang
  1. 同事说看了没问题,可以合并到 master。 于是你就把 zhang 合并到 master 上去。 如果同事说有问题,你可以修改代码重复流程2
git checkout master
git pull
git merge zhang

最后推送到远程仓库并删除本地 / 远程分支:

git push
git branch -d zhang
git push origin -d zhang
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。