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

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

add

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

git add <文件>

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

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操作在一定程度上会帮你自动合并:

冲突解决完毕之后需要重新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下来的时候默认创建的。

所有的branch都是平等的。

branch的操作

创建branch

git branch <分支名>

切换branch

git checkout <分支名>

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

git checkout -b <分支名>

删除branch

git branch -d <分支名>

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

工作流:Feature 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
❤️ 转载文章请注明出处,谢谢!❤️