-
一、Git 仓库创建及工作量
-
1.1 Git 常用命令
- git init: 初始化版本库
- 添加文件到版本库:
- git add —— 在暂存区
- git commit ——提交
- git rm --cached ——移除提交
- git status:查看仓库状态
- git tag : 标签
- git log :命令可以查看所有产生的 commit 记录,所以可以看到已经产生了一条 commit 记录,而提交时候的附带信息叫 “first commit” 。
- 消除最近几次的提交: git reset --hard ***(要回滚到的位置的那个commit的编号)
- 正确删除文件: git rm ***(文件名)
- 回滚和工作区一样:git reset --hard HEAD
- git branch:branch 即分支的意思,分支的概念很重要,尤其是团队协作的时候,假设两个人都在做同一个项目,这个时候分支就是保证两人能协同合作的最大利器了。举个例子,A, B俩人都在做同一个项目,但是不同的模块,这个时候A新建了一个分支叫a, B新建了一个分支叫b,这样A、B做的所有代码改动都各自在各自的分支,互不影响,等到俩人都把各自的模块都做完了,最后再统一把分支合并起来。
- git checkout a: 切换分支
- git checkout -b a:这个命令的意思就是新建一个a分支,并且自动切换到a分支。
- 查看所有分支(包括远端分支):git branch -av
- git merge:A同学在a分支代码写的不亦乐乎,终于他的功能完工了,并且测试也都ok了,准备要上线了,这个时候就需要把他的代码合并到主分支master上来,然后发布。git merge 就是合并分支用到的命令,针对这个情况,需要先做两步,第一步是切换到 master 分支,如果你已经在了就不用切换了,第二步执行 git merge a ,意思就是把a分支的代码合并过来,不出意外,这个时候a分支的代码就顺利合并到 master 分支来了。
- git branch -d:假如这个分支新建错了,或者a分支的代码已经顺利合并到 master 分支来了,那么a分支没用了,需要删除,这个时候执行 git branch -d a 就可以把a分支删除了。
- git branch -D:有些时候可能会删除失败,比如如果a分支的代码还没有合并到master,你执行 git branch -d a 是删除不了的,它会智能的提示你a分支还有未合并的代码,但是如果你非要删除,那就执行 git branch -D a 就可以强制删除a分支。
- 利用一个很强大的 alias 命令,我们知道我们输入 git log 查看日志的时候是类似这样的:
- 利用一个比较屌的命令,输入
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
是不是比较清晰,整个分支的走向也很明确,但是每次都要输这么一大串是不是也很烦?这时候就该想到 alias ,输入:git config --global alias.lg “log --graph --pretty=format:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset’ --abbrev-commit --date=relative”
-
这样以后直接输入 git lg 就行了。
-
git diff: 使用场景是我们经常在做代码改动,但是有的时候2天前的代码了,做了哪些改动都忘记了,在提交之前需要确认下,这个时候就可以用diff来查看你到底做了哪些改动。(红色的部分前面有个 - 代表我删除的,绿色的部分前面有个 + 代表我增加的,所以从这里你们能一目了然的知道我到底对这个文件做了哪些改动。)
-
直接输入 git diff 只能比较当前文件和缓存区文件差异,什么是缓存区?就是你还没有执行 git add 的文件。
-
做其他比较:
git diff <$id1> <$id2> # 比较两次提交之间的差异 git diff <branch1>..<branch2> # 在两个分支之间比较 git diff --staged # 比较暂存区和版本库差异
-
两种合并:
-
我们知道 merge 分支是合并的意思,我们在一个 featureA 分支开发完了一个功能,这个时候需要合并到主分支 master 上去,我们只需要进行如下操作:
git checkout master git merge featureA
其实 rebase 命令也是合并的意思,上面的需求我们一样可以如下操作:
git checkout master git rebase featureA
rebase 跟 merge 的区别你们可以理解成有两个书架,你需要把两个书架的书整理到一起去,第一种做法是 merge ,比较粗鲁暴力,就直接腾出一块地方把另一个书架的书全部放进去,虽然暴力,但是这种做法你可以知道哪些书是来自另一个书架的;第二种做法就是 rebase ,他会把两个书架的书先进行比较,按照购书的时间来给他重新排序,然后重新放置好,这样做的好处就是合并之后的书架看起来很有逻辑,但是你很难清晰的知道哪些书来自哪个书架。
-
-
git commit --amend:修改最近一次的commit提交信息。
-
git rebase -i **(选择某一个commit):
-
commit的合并:git rebase -i ***(选择最开始的一个commit)
-
查看工作在哪一个分支: git branch -av
-
-
1.2 创建仓库:
- 图形界面方式:新建Demo仓库,上传文件到本地仓库。
- 命令行方式:
mkdir Demo2
- 展示隐藏或者不隐藏的文件:
- 添加文件到版本库:
- 图形界面方式:新建Demo仓库,上传文件到本地仓库。
-
二、Git 的主要功能
-
2.1 远程仓库
- 添加远程库
- 从远程库克隆
- Push & Pull:
在提交代码之前我们先要了解两个命令,也是上次的文章没有介绍的,因为这两个命令需要跟远程仓库配合。 - Push :直译过来就是「推」的意思,什么意思呢?如果你本地代码有更新了,那么就需要把本地代码推到远程仓库,这样本地仓库跟远程仓库就可以保持同步了。
代码示例:git push origin master
意思就是把本地代码推到远程 master 分支。 - Pull:直译过来就是「拉」的意思,如果别人提交代码到远程仓库,这个时候你需要把远程仓库的最新代码拉下来,然后保证两端代码的同步。
代码示例:git pull origin master
意思就是把远程最新的代码更新到本地。一般我们在 push 之前都会先 pull ,这样不容易冲突。
-
2.2 克隆仓库
- git clone
-
2.3 标签管理
- git tag
-
2.4 分支管理
- git branch
-