git 的作用
git 的作用主要有两个作用:
- 帮助管理不同的版本
设想你要完成一个项目,基本上不会一次就能完美完成,常常需要调试和修改,当你修改好之后却发现修改错了,还想回到原来的版本,那么没有管理工具(如git)的情况下,你只能一个个将所有文件中修改的代码删除,这无疑是很麻烦的,使用了git 可以使你轻松的回到之前的任一版本。
- 多人协助开发
一般开发大型项目是由多人协作开发的,通常是把项目分成一个个模块然后分发给团队中的每个人,等每个人开发完成后,再由将各个模块合并。若没有项目管理工具如(git),那么模块合并工作便有组长完成,当出现bug时则需要大家凑到一起探讨,当团队人数很多时,便很麻烦,git 能够合并模块,并对项目进行管理,大大增加生产效率。
git 的基本命令
git 的提交方法
1.本地仓库的创建
在git bash 命令行中输入以下命令,以生成.git 文件夹,.git 文件夹中的文件是用来管理本地仓库的。
git init
2.查看当前仓库的状态信息
git status
如:我在新建的一个本地空仓库中新建了index.js 和 index.html 两个文件
查看本地仓库的状态如下:
红色表示本地仓库已被修改的内容
若是一个已被add 的文件不想被提交,可使用以下命令将文件变红
git reset <filename>
eg:
git reset index.html
3.将被修改的文件加入暂存区
git add <filename> //将单个的文件加入暂存区
git add head.html
git add . //将所有被修改的文件加入暂存区
输入git add 指令后使用 git staus 查看状态如下
4.本地仓库的提交
指令如下:
git commit -m <message>
注意:“commit” 与 “-m”中间要有空格,提交之后显示的结果如下:
总结:当我们修改了本地仓库时,我们首先要先使用git add命令将文件status 变绿,然后再使用git commit 命令提交。若是变更了多个文件只add 了一个文件,执行git commit 命令只会提交已被add 的那个文件。
文件的状态
版本回退
应用场景:当你提交了之后,发现提交错了,想要回退到之前版本,这是可使用版本回退命令。
版本回退的命令是:
git reset <commitID> <回退模式>
eg:
git reset 7ec2f56db //commitID 仅需七位及以上位数就能区分
每一次提交都会有一个独特的 commitID(可使用 git log)查看,我们可以利用独特的 commitID 可以回退到当时提交的版本。
执行回退命令再执行git log 后发现第六次提交的记录消失了
要回到最新版本有两种方式
- 使用命令 git pull
- 使用git relog 查看所有commit (包括最新的,git log 无法查看回退版本之后的 commit)
版本回退有三种模式
- – hard :不保留所有变更
- –soft :保留变更且变更内容处于Staged状态
- –mixed :保留变更且变更内容处于Modified状态
虽然显示为modified,但实际上是vscode编辑器提示的,不是真正的git状态,只要是绿色,就是Staged状态。
branch
应用场景:在前面我们实现版本切换总是使用git reset + commitID,但是commitID 是无规则的,难以记忆,那么切换分支就能很好的解决这个问题。
注意:每个仓库都存在一个分支名为master,它是主分支,新分支的创建是以这个为基础的
1.创建分支的命令
git checkout -b <name><template>
//name 表示的是要创建分支的名称
//template 是指以哪个分支或者commit为模板,若不填,以当前所在分支为模板
eg:
git checkout -b bc-a
模板的作用:子分支的commit 记录应该与模板的commit 记录相同。
注意,分支创建之后,子分支与模板分支的commit 互不干扰
2.切换分支的方法
git checkout <branchName>
eg:
git check master
3.查看所有分支的命令
git branch
merge
应用场景:合并分支的变更(注意,并不是将分支的内容合并,而是分支变更的内容)。
指令:
git merge <branchName>
eg:
git merge b-a
操作过程:
1.创建分支 (注意:git cob 是 git checkout -b 的简写
2. 模拟小A 和小B 分别切换到 bc-a 分支和 bc-b 分支,对内容进行更改并提交。
3.切花到master分支,使用git merge 命令先合并bc-a的分支,内容发生了变化(注意:git mg 是 git merg e 的简写)
4.合并bc-b分支
注意:在这里发生了冲突,需要我们人为的决定保留什么内容。
注意,在这里我们保留了小A和小B两个人的修改,然后重新git add 然后git commit 即可。
4.查看主分支的commit (使用git log),结果如下
多出来的 “解决冲突”commit 是用来解决冲突的。
远程仓库
上面所有的内容都在本地仓库进行的,若是一个团队每个人都需要 git,但是每个人都初始化一个项目是比较不合理的,所以我们需要一个远程仓库来管理分支。每个人完成了分支后,将自己的部分远程推送到远程仓库中,其余人也可以通过这个远程仓库拉取其他人的分支到自己本地仓库来进行开发。
我们可以使用 github 作为远程仓库对我们的项目进行管理。
1.在github上创建一个仓库
2. 在本地新建两个文件夹A 和B,分别执行git clone 命令将远程仓库下载到本地
git clone <远程仓库下载地址>
执行完毕后会发现在A 和 B 文件夹中会生成一个放着远程仓库文件的文件夹,且文件夹名称与远程仓库名称相同。
3.在 A 中创建一个分支名为 bc-a 并执行 git push 命令推送到远程仓库。
注意:我们发现出错了,这是因为这个分支只存在我们本地,在远程仓库中没有分支与我们这个分支相连通,本地分支不知道该提交到哪里,所以我们需要使用以下命令,在远程仓库同时创建一个相连通的分支,作为上流分支用来管理本地的推送
git push --set-upstream orgin bc-a
结果显示在远程仓库新建立了一个分支与本地相关联
4.在本地仓库中提交后再推送到远程,操作成功
5.B想要使用 A 刚刚提交的那个 bc-a 分支,可以使用git fetch 命令将分支拉取到本地
6.使用 git check + branchName 命令切换到 bc-a 分支,如果没有在之前使用 git fetch 命令,那么此命令无效。
注意点1:在上图中,使用 git branch 命令发现并没有显示 bc-a 分支,那是因为分支git branch 命令仅显示本地的分支,我们使用 git checkout 命令后bc-a 分支就也成了本地的,只是模板分支来自远程。
注意点2:git checkout -b < name>< template> 命令,若template 是来自远程的,我们需要在template 前面加一个 origin
eg:
git checkout -b bc-b origin bc-a
git pull 命令
应用场景:在前面 B 使用git fetch 将A 提交的分支bc-a fetch到本地并切了个本地分支后,B中的bc-a 分支与远程的bc-a分支是完全相同的,若是A在bc-a中又修改了代码并执行git push 命令推送到了远程,那么B如何使新的变更更新到本地分支呢?
方法:
- fetch + merge 命令
- git pull 命令(等同于先 fetch 后再自动 merge)
rebase 命令
应用场景:在前面,我们知道template 分支与新建的分支的commit 是一致的,但是之后template 分支与新建的分支之后的提交互不干扰,我们想要template 之后的commit 记录合并到新建分支上,可以使用git rebase 命令。
rebase 的原理是枚举变更的commit,依次变基,它会先拿出3号的commit,然后以125为基础添加3号commit,变成1253,再拿出1253为基础添加4号commit,直至所有新增的commit都完成变基。
总结:rebase 就是重新排列base,而base就是指commit。
实战:
1.新建一个仓库,在master 分支完成两次commit(1和2)
2.切出bc分支,在bc分支完成两次commit(3和4)。
3.切换master 分支,完成一次commit (5)
4.切换到bc分支,然后执行 git rebase master 命令,对commit 进行重排
5.发生冲突,我们只需手动保留哪部分代码,然后执行git add命令然后继续执行git rebase --continue命令
6.重复上面步骤,完成重排
7.最后结果如下:
git 常用命令汇总
- git add
- git commit
- git push
- git status
- git branch
- git rebase
- git merge
- git cherrry pick
- git stash
- git pull
- fit fetch
- git log
- git relog
- git remote
- git clone
- git reset
如此多的命令再加上参数,实在很难记忆,git 为我们提供了起别名(alias)功能,我们可以为这些命令设置简写方式。这里仅介绍一种方法。
在安装git 的路径中的 ming64 文件夹中的 etc 文件夹找到 gitconfig 文件添加 alias 的配置
来源:CSDN
作者:xiaofangmin
链接:https://blog.csdn.net/xiaofangmin/article/details/104864541