Git基本命令操作及分支管理冲突解决
Git 简介Git(全局信息追踪器)Git 是一个分布式版本控制工具,Git的使用中央仓库不是必须的,用户本地就是一个完整的版本仓库,代码的前进、回退、删除等等操作都可以直接在本地进行,不需要中央仓库。但是,在实际操作中,为了能够和其他同事快速沟通以及合并代码,一般还是会搭建一个中央仓库。Git对分支的管理非常友好,可以快速创建或者合并分支。与 SVN 对比:Svn集中式的版本控...
Git 简介
Git(全局信息追踪器)
Git 是一个分布式版本控制工具,Git的使用中央仓库不是必须的,用户本地就是一个完整的版本仓库,代码的前进、回退、删除等等操作都可以直接在本地进行,不需要中央仓库。但是,在实际操作中,为了能够和其他同事快速沟通以及合并代码,一般还是会搭建一个中央仓库。Git对分支的管理非常友好,可以快速创建或者合并分支。
与 SVN 对比:
Svn集中式的版本控制工具,Svn中,必须要有中央仓库,所有的版本信息都保存在中央仓库中,代码的前进、回退、删除等等操作都需要在中央仓库中进行,用户本地保存的只是版本仓库的一个副本,Svn中的分支非常臃肿。
Git 安装与配置
直接在官网下载 https://gitforwindows.org/ 下载完成后,一直下一步即可!
安装成功后,鼠标右键会多出两个 Git 相关的功能
- Git GUI Here
- Git Bash Here
点击 Git Bash Here
就可进去 Git 的命令窗口了,在里面很多基本的命令是和 linux 的命令相同的。
初次安装,需要在命令行窗口输入一下命令,初始化一下用户名和邮箱
git config --global user.name "huven"
git config --global user.email "1416454766@qq.com"
创建版本库
版本库也就是我们平常说的仓库,repository。其实也就是个文件夹,只是这个文件夹被git管理,该文件夹中的文件的创建、修改、删除都能够被追踪。
创建文件夹:
// 进入自己需要创建 epository 的目录下
cd /tools/GitPro
// 创建一个文件夹
mkdir myRepository
初始化
通过 git init
命令把这个目录变成Git可以管理的仓库,创建成功后在该文件夹下会多出一个.git的文件夹。
// 在之前创建的 myRepository 文件夹下面执行初始化操作
git init
基本命令
git add 添加文件到暂存区
执行下面的命令即可
git add hello.txt
这就表示将已有的 hello.txt 文件添加到暂存区,执行上面的命令,没有任何显示,这就对了,Unix的哲学是“没有消息就是好消息”,说明添加成功!
git commit 文件提交到仓库
git commit -m '添加hello.txt文件'
commit -m的-m后面跟的是本次操作的备注说明信息。最好是有意义的,也就是下次看到这个说明就清楚提交了什么内容。
为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件
status 和 diff 命令
git status
查看当前的状态
git diff
是 difference 的简写,用来查看文件的变化(工作区和版本库)
git log 命令
我们可以通过 git log
命令来查看修改的历史信息。
当我们修改了很多次的时候,这样查看就会显得比较臃肿,我们可以使用另外一个命令
git log --pretty=oneline
我们还可以查看指定文件的 log
git log --pretty=oneline aaa.txt
版本回退操作
1、回退到上一个版本:
git reset --hard HEAD^
2、回到之前最新的版本
git reset --hard 35c60e469
‘35c60e469’是最新版本的版本号,虽然不全,但是前几位要正确,git会自动匹配
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向first update file
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。
切换前,用git log可以查看提交历史,以便确定要回退到哪个版本。
3、切换到了之前,要换回其未来版本
git reflog
使用这个命令来查看所有的版本信息
然后 git reset --hard commit_id
commit_id 表示之前的上面图片中的黄色的 id,匹配前几位和其他不相同的就可以了
Git 的分支管理
所谓的分支管理其实就是就是同时可以有多条时间线在执行,最终合并为一个点,有点类似于多线程操作,这也正是git有别于其他版本控制软件的地方。
[
创建与合并分支
在版本回退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。
分支的一些基本命令
1-查看当前分支
git branch
查看当前的分支,master 前面有一颗 * 就表示是当前分支
2-创建分支
git branch dev1
3-切换分支
git checkout dev1
4-创建并切换分支
git checkout -b dev2
5-合并分支
需要注意的是:我们在 dev2 分支上 add 并且 commit 后,master还是不能看见 dev2 提交的文件的,这个时候我们需要在 master 上执行 git merge dev2
命令。
6-删除分支
git branch -d dev2
执行这条命令就可以删除 dev2 这条分支了
分支管理的命令总结
命令 | 描述 |
---|---|
git branch | 查看分支情况 |
git branch {name} | 创建分支 {name} 表示名称 |
git checkout {name} | 切换分支 |
git checkout -b {name} | 创建分支并且切换分支 |
git merge {name} | 合并某条分支到当前分支 |
git branch -d {name} | 删除分支 |
冲突问题
版本控制软件不可避免的总会碰到版本冲突的问题
1-故意制造冲突
- 切换到 dev2 分支中修改 bbb.txt 文件,然后 add 并且 commit
- 再切换到 dev3 分支中继续修改 bbb.txt 文件,也执行 add 并且 commit
- 切换到 master 分支执行
git merge dev2 dev3
执行后出现了以下提示:
$ git merge dev2 dev3
Fast-forwarding to: dev2
Trying simple merge with dev3
Simple merge did not work, trying automatic merge.
Auto-merging bbb.txt
ERROR: content conflict in bbb.txt
fatal: merge program failed
Automatic merge failed; fix conflicts and then commit the result.
2-查看冲突的文件
$ cat bbb.txt
11111
<<<<<<< .merge_file_a03708
dev22222222222222222
=======
dev333333
>>>>>>> .merge_file_a01976
3-解决冲突
master 直接修改就可以了,修改后
11111
dev22222222222222222
dev333333
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)