谢欣带你学Git,一看就会,一学就废
Git的简介
Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。(牛X)
Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git的安装
Git的使用
- 右键,点击 Git Bash Here 选项, 出现 黑框框.!
- 输入 $ git config –list 命令查看 自己的 Git 配置
上图 中 是自己的 git 配置(每个人的都不一样) , 如果没有,我们就去添加 一个 全局Git配置.
Git之设置全局身份
因为Git是分布式版本控制系统,所以,每个机器都必须有自己的绰号:你的名字和Email地址。
修改完成后 可以 输入 刚刚的查看命令查看.发现已经更改
也可以去硬盘查看
打开它会看到.如下信息.和黑屏命令显示的一样的.
全局身份信息设置完毕后,就可以创建版本库了.
Git之创建版本库 git init
什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
所以,创建一个版本库非常简单,首先,选择一个合适的地方(最好 D , E , X盘),创建一个空目录:
在空文件夹中点击右键, 选择 git bash here
输入 创建版本库命令 git init
命令: git init
输入完毕后,去文件夹查看
返回上一级目录.再看有无绿色对勾
如果有, 证明 以上你操作真确了.
Git之文件管理-添加文件
命令: git status
添加文件前,先用 git status 命令 查看当前git目录的版本状态
上图的意思是: 状态是在主分支上, 没有任何提交. 创建一个文件, 使用 git add 添加.
命令: git add
git add 文件名1 文件名2 把当前文件加入到暂存区
来和我一起操作吧.
使用 touch 命令创建一个hello.txt文件
Touch 直接意思是摸的意思, 计算机中 意译 为创建文件
执行完毕后,会在 文件夹中看到hello.txt 的空文件
如上图, 此时 hello.txt 没有任何 标记.
我们把这个空文件进行添加试试吧.
执行 git add 文件名 的命令
命令执行完毕后, 回退一个 文件夹, 看下 原本的绿色的对勾,变成 红色感叹号了
那么 我们再看下 git 的 状态.
是不是 和 刚刚的 显示不一样呢. 这里多了一个 hello.text 文件.
请记下这句话, 当命令 git add xxx yyy zzz 执行后, 文件被保存在了 git 的暂存区. 意思是 暂时存放的区域.
就好比你去看电影, 暂存区只是你现在买了票, 并未进入到 放映厅.
暂存区: 上图绿色的hello.txt文件代表现在暂存区有一个新的文件没有提交 提交之后才会进入版本库
命令: git commit -m 提交记录 m 代表 分支的名称
意思: 把暂存区里面的数据提交到当前所在的分支(master)
那么我们把这个 hello.txt 提交吧.
输入 git commit -master 命令
上面说1个文件改变. 执行成功后, 变绿了.. 又绿了….
绿了…绿了… git版本库绿了…
打开 hello.txt 编辑一段文字保存后, 记得一定要 ctrl +s , 会看到 文本的绿色变成了 感叹号的红色.
寓意,文件发生了版本的改变.
再次输入 git status 命令后,发现 黑框 变红. Modified 意思是 修改了.
如果 , 编辑的文字 不正确. 需要 退回到刚刚的 空文件的话. 需要执行上面的命令
命令: Git checkout – 文件名 这个是撤销的意思
暂存区中的反悔,撤销!!
红色感叹号 又回来了. 我们再次重新编辑他
重新编辑hello.txt 并保存, 然后 红色感叹号 又来了.
再次 执行 git add 并 git commit -master 提交.
命令: git log 看 日志
输入 git log 可以看到 提交次数和时间
命令: git log --pretty=oneline 按行显示
命令: git reset --hard HEAD^ 回退到上一个版本
如果觉得当前(第二次提交) 提交不太好, 想回退上一个版本 , 执行上面的命令.
回退到了 第一次 空的 提交
下面 多修改文件 多提交几次.
注意: 这次加了 备注, 第二次提交
继续修改文件, 提交
查看 日志 git log --pretty=oneline
这次 我们回退到 指定 版本号 比如 c9b9…
命令: git reset --hard cb5f6we4234443242342342342 回退到指定的版本号
又回到了 第一次 提交的 空文件了.
Head 是 指向的意思. 脑袋的意思.
Git之工作区和暂存区
Add 命令后
使用commit
注意: HEAD 默认 最新的提交.
Git之查看修改后的文件
命令: git diff head -- 文件名
对文件做出修改,保存后,输入命令查看
Git之撤销修改(回退版本) 重要!!!
情况1:数据只存在工作区
git checkout -- hello.txt 丢弃工作区修改
情况2:数据使用add 添加到暂存区
思路:先从暂存区里面移除相应的文件, 再使用情况1的方式丢弃
- 修改文件 , add 一下
查看下他的头在哪里,
- 解决: 1. 先回到他的 Head 头上面(作用, 把文件从暂存区撤回出去)
- 2.再用 get checkout – hello.txt 的方法回退
改完, 颜色成 绿色对勾.
情况3:数据使用add 添加到暂存区并commit到版本库
思路: 版本回退的方式 git reset –hard xxxx
思路: 版本回退的方式 git reset –hard xxxx
回退版本完成后, 文件夹又成空了
情况4: 数据已经提交到远程仓库了.
思路: 无法挽救,神仙难撤回
Git之文件的删除 命令 git rm -rf 文件名
先删除
命令: git rm -rf 文件名
再提交
Git commit -m 备注
右键删除.
还需要提交一下,才能删除.
直接删除 不行,不然无法提交.
需要用 命令删除一次
然后再提交
分支管理-创建与合并分支
相关命令:
命令: git branch 查看所有分支
命令: git branch dev 创建一个叫dev的分支,不切换
命令: git checkout dev 切换到一个叫dev的分支
命令: git checkout -b mytest 创建mytest 分支并切换到mytest 分支
命令: git branch -d mytest删除mytest分支
如果 本身在 mytest , 则删除不了, 需要切换到其他分支, 去删除另外的分支
命令: git merge dev 合并分支
如把dev合并到master那么要在master分支上执行合并的命令
切换到 dev , 添加文件,并保存.
切换到 master , 合并
分支测试
切换到 dev 分支下,并新建一个文件提交
在切换到 master 下 , 会看到 文件 dev分支2.txt 没有了., 这就是不同分支的好处
再切换到 dev , 文件又 回来了
分支冲突(原因,2个分支同时操作一个文件了)
2个分支 都有一个 文件名字一样的 文件, 文件中的内容不同时候,则起了冲突
合并后 出现问题
变成了 合并中.
文件也变成了
通过 git status 发现 both 同时 添加了…
分支冲突解决(手动改正,重新 add,提交)
分支策略
通常,合并分支时,如果没有分歧解决,就会直接移动文件指针,这就是Fast forward模式。
上面没分歧的时候 可以看到. 是 fast forward 模式
举例来说,开发一直在master分支进行,但忽然有一个新的想法,于是新建了一个dev的分支,并在其上进行一系列提交,完成时,回到master分支,此时,master分支在创建dev分支之后并未产生任何新的commit。此时的合并就叫fast forward。
但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
强制禁用Fast forward模式的具体方法
下面我们实战一下--no-ff方式的git merge:
首先,仍然创建并切换dev分支:
$ git checkout -b dev1
Switched to a new branch 'dev1'
修改readme.txt文件,并提交一个新的commit:
$ git commit -m "添加dev1上的修改内容"
[dev 8bee24d] 添加dev1上的修改内容
1 file changed, 2 insertions(+)
现在,我们切换回master:
$ git checkout master
Switched to branch 'master'
准备合并dev1分支,请注意--no-ff参数,表示禁用Fast forward:
$ git merge --no-ff -m "merge with no-ff" dev1
Merge made by the 'recursive' strategy.
readme.txt | 1 +
1 file changed, 1 insertion(+)
因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
合并后,我们用git log看看分支历史:
$ git log --graph --pretty=oneline --abbrev-commit
* e1e9c68 (HEAD -> master) merge with no-ff
|\
| * f52c633 (dev) add merge
|/
* cf810e4 conflict fixed
...
可以看到,不使用Fast forward模式,merge后就像这样:
可以看到,不使用Fast forward模式,merge后就像这样:
分支策略
在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
所以,团队合作的分支看起来就像这样:
分支管理-Bug分支
使用场景
现有主分支master
从主分支切了一个dev分支开发一个新的NB的功能。。。但是还只写了一半
领导说线上和master项目有重大bug请速度解决。你看了一,这个bug5分钟可解决,
但是我还在开发新功能,但没有提交
需要把当前dev分支的工作现场储藏起来
切到master 切一个issue的bug分支出来解决bug
解决完之后回到master再合并issue分支。再删除issue的分支
相关命令
命令: git stash 储藏当前分支的工作区
储藏完成这后再执行git status发现工作区tree clean
命令: git stash list 显示当前分支储藏的工作区的集合
命令: git stash pop取出当前分支储藏的工作区栈顶的第一个储藏对象
Git工作示意图
使用GitHub远程仓库
Git命令
Git clone和直接下载zip的异同点
- 直接下载zip包:直接下载zip包就相当于你切断了与gitee上的代码的联系,单纯的就是获得了一个工程文件,如果你想直接pull或者push的话都是不行的
- git clone:而这个git clone的话git会先在你的当前文件夹建立一个本地仓库,然后再去复制这个工程,这个时候在这个文件夹下面就是可以直接git pull或者push的
所以,如果你只是想下载工程文件,那么直接下载zip会简单一些,如果你想往这个开源项目上添砖加瓦,那还是git clone会好一些哦~
谢欣带你学Git,一看就会,一学就废
Git的简介
Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。(牛X)
Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git的安装
Git的使用
- 右键,点击 Git Bash Here 选项, 出现 黑框框.!
- 输入 $ git config –list 命令查看 自己的 Git 配置
上图 中 是自己的 git 配置(每个人的都不一样) , 如果没有,我们就去添加 一个 全局Git配置.
Git之设置全局身份
因为Git是分布式版本控制系统,所以,每个机器都必须有自己的绰号:你的名字和Email地址。
修改完成后 可以 输入 刚刚的查看命令查看.发现已经更改
也可以去硬盘查看
打开它会看到.如下信息.和黑屏命令显示的一样的.
全局身份信息设置完毕后,就可以创建版本库了.
Git之创建版本库 git init
什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
所以,创建一个版本库非常简单,首先,选择一个合适的地方(最好 D , E , X盘),创建一个空目录:
在空文件夹中点击右键, 选择 git bash here
输入 创建版本库命令 git init
命令: git init
输入完毕后,去文件夹查看
返回上一级目录.再看有无绿色对勾
如果有, 证明 以上你操作真确了.
Git之文件管理-添加文件
命令: git status
添加文件前,先用 git status 命令 查看当前git目录的版本状态
上图的意思是: 状态是在主分支上, 没有任何提交. 创建一个文件, 使用 git add 添加.
命令: git add
git add 文件名1 文件名2 把当前文件加入到暂存区
来和我一起操作吧.
使用 touch 命令创建一个hello.txt文件
Touch 直接意思是摸的意思, 计算机中 意译 为创建文件
执行完毕后,会在 文件夹中看到hello.txt 的空文件
如上图, 此时 hello.txt 没有任何 标记.
我们把这个空文件进行添加试试吧.
执行 git add 文件名 的命令
命令执行完毕后, 回退一个 文件夹, 看下 原本的绿色的对勾,变成 红色感叹号了
那么 我们再看下 git 的 状态.
是不是 和 刚刚的 显示不一样呢. 这里多了一个 hello.text 文件.
请记下这句话, 当命令 git add xxx yyy zzz 执行后, 文件被保存在了 git 的暂存区. 意思是 暂时存放的区域.
就好比你去看电影, 暂存区只是你现在买了票, 并未进入到 放映厅.
暂存区: 上图绿色的hello.txt文件代表现在暂存区有一个新的文件没有提交 提交之后才会进入版本库
命令: git commit -m 提交记录 m 代表 分支的名称
意思: 把暂存区里面的数据提交到当前所在的分支(master)
那么我们把这个 hello.txt 提交吧.
输入 git commit -master 命令
上面说1个文件改变. 执行成功后, 变绿了.. 又绿了….
绿了…绿了… git版本库绿了…
打开 hello.txt 编辑一段文字保存后, 记得一定要 ctrl +s , 会看到 文本的绿色变成了 感叹号的红色.
寓意,文件发生了版本的改变.
再次输入 git status 命令后,发现 黑框 变红. Modified 意思是 修改了.
如果 , 编辑的文字 不正确. 需要 退回到刚刚的 空文件的话. 需要执行上面的命令
命令: Git checkout – 文件名 这个是撤销的意思
暂存区中的反悔,撤销!!
红色感叹号 又回来了. 我们再次重新编辑他
重新编辑hello.txt 并保存, 然后 红色感叹号 又来了.
再次 执行 git add 并 git commit -master 提交.
命令: git log 看 日志
输入 git log 可以看到 提交次数和时间
命令: git log --pretty=oneline 按行显示
命令: git reset --hard HEAD^ 回退到上一个版本
如果觉得当前(第二次提交) 提交不太好, 想回退上一个版本 , 执行上面的命令.
回退到了 第一次 空的 提交
下面 多修改文件 多提交几次.
注意: 这次加了 备注, 第二次提交
继续修改文件, 提交
查看 日志 git log --pretty=oneline
这次 我们回退到 指定 版本号 比如 c9b9…
命令: git reset --hard cb5f6we4234443242342342342 回退到指定的版本号
又回到了 第一次 提交的 空文件了.
Head 是 指向的意思. 脑袋的意思.
Git之工作区和暂存区
Add 命令后
使用commit
注意: HEAD 默认 最新的提交.
Git之查看修改后的文件
命令: git diff head -- 文件名
对文件做出修改,保存后,输入命令查看
Git之撤销修改(回退版本) 重要!!!
情况1:数据只存在工作区
git checkout -- hello.txt 丢弃工作区修改
情况2:数据使用add 添加到暂存区
思路:先从暂存区里面移除相应的文件, 再使用情况1的方式丢弃
- 修改文件 , add 一下
查看下他的头在哪里,
- 解决: 1. 先回到他的 Head 头上面(作用, 把文件从暂存区撤回出去)
- 2.再用 get checkout – hello.txt 的方法回退
改完, 颜色成 绿色对勾.
情况3:数据使用add 添加到暂存区并commit到版本库
思路: 版本回退的方式 git reset –hard xxxx
思路: 版本回退的方式 git reset –hard xxxx
回退版本完成后, 文件夹又成空了
情况4: 数据已经提交到远程仓库了.
思路: 无法挽救,神仙难撤回
Git之文件的删除 命令 git rm -rf 文件名
先删除
命令: git rm -rf 文件名
再提交
Git commit -m 备注
右键删除.
还需要提交一下,才能删除.
直接删除 不行,不然无法提交.
需要用 命令删除一次
然后再提交
分支管理-创建与合并分支
相关命令:
命令: git branch 查看所有分支
命令: git branch dev 创建一个叫dev的分支,不切换
命令: git checkout dev 切换到一个叫dev的分支
命令: git checkout -b mytest 创建mytest 分支并切换到mytest 分支
命令: git branch -d mytest删除mytest分支
如果 本身在 mytest , 则删除不了, 需要切换到其他分支, 去删除另外的分支
命令: git merge dev 合并分支
如把dev合并到master那么要在master分支上执行合并的命令
切换到 dev , 添加文件,并保存.
切换到 master , 合并
分支测试
切换到 dev 分支下,并新建一个文件提交
在切换到 master 下 , 会看到 文件 dev分支2.txt 没有了., 这就是不同分支的好处
再切换到 dev , 文件又 回来了
分支冲突(原因,2个分支同时操作一个文件了)
2个分支 都有一个 文件名字一样的 文件, 文件中的内容不同时候,则起了冲突
合并后 出现问题
变成了 合并中.
文件也变成了
通过 git status 发现 both 同时 添加了…
分支冲突解决(手动改正,重新 add,提交)
分支策略
通常,合并分支时,如果没有分歧解决,就会直接移动文件指针,这就是Fast forward模式。
上面没分歧的时候 可以看到. 是 fast forward 模式
举例来说,开发一直在master分支进行,但忽然有一个新的想法,于是新建了一个dev的分支,并在其上进行一系列提交,完成时,回到master分支,此时,master分支在创建dev分支之后并未产生任何新的commit。此时的合并就叫fast forward。
但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
强制禁用Fast forward模式的具体方法
下面我们实战一下--no-ff方式的git merge:
首先,仍然创建并切换dev分支:
$ git checkout -b dev1
Switched to a new branch 'dev1'
修改readme.txt文件,并提交一个新的commit:
$ git commit -m "添加dev1上的修改内容"
[dev 8bee24d] 添加dev1上的修改内容
1 file changed, 2 insertions(+)
现在,我们切换回master:
$ git checkout master
Switched to branch 'master'
准备合并dev1分支,请注意--no-ff参数,表示禁用Fast forward:
$ git merge --no-ff -m "merge with no-ff" dev1
Merge made by the 'recursive' strategy.
readme.txt | 1 +
1 file changed, 1 insertion(+)
因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
合并后,我们用git log看看分支历史:
$ git log --graph --pretty=oneline --abbrev-commit
* e1e9c68 (HEAD -> master) merge with no-ff
|\
| * f52c633 (dev) add merge
|/
* cf810e4 conflict fixed
...
可以看到,不使用Fast forward模式,merge后就像这样:
可以看到,不使用Fast forward模式,merge后就像这样:
分支策略
在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
所以,团队合作的分支看起来就像这样:
分支管理-Bug分支
使用场景
现有主分支master
从主分支切了一个dev分支开发一个新的NB的功能。。。但是还只写了一半
领导说线上和master项目有重大bug请速度解决。你看了一,这个bug5分钟可解决,
但是我还在开发新功能,但没有提交
需要把当前dev分支的工作现场储藏起来
切到master 切一个issue的bug分支出来解决bug
解决完之后回到master再合并issue分支。再删除issue的分支
相关命令
命令: git stash 储藏当前分支的工作区
储藏完成这后再执行git status发现工作区tree clean
命令: git stash list 显示当前分支储藏的工作区的集合
命令: git stash pop取出当前分支储藏的工作区栈顶的第一个储藏对象
Git工作示意图
使用GitHub远程仓库
Git命令
Git clone和直接下载zip的异同点
- 直接下载zip包:直接下载zip包就相当于你切断了与gitee上的代码的联系,单纯的就是获得了一个工程文件,如果你想直接pull或者push的话都是不行的
- git clone:而这个git clone的话g
谢欣带你学Git,一看就会,一学就废
Git的简介
Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。(牛X)
Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git的安装
Git的使用
- 右键,点击 Git Bash Here 选项, 出现 黑框框.!
- 输入 $ git config –list 命令查看 自己的 Git 配置
-
上图 中 是自己的 git 配置(每个人的都不一样) , 如果没有,我们就去添加 一个 全局Git配置.
Git之设置全局身份
因为Git是分布式版本控制系统,所以,每个机器都必须有自己的绰号:你的名字和Email地址。
修改完成后 可以 输入 刚刚的查看命令查看.发现已经更改
也可以去硬盘查看
打开它会看到.如下信息.和黑屏命令显示的一样的.
全局身份信息设置完毕后,就可以创建版本库了.
Git之创建版本库 git init
什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
所以,创建一个版本库非常简单,首先,选择一个合适的地方(最好 D , E , X盘),创建一个空目录:
在空文件夹中点击右键, 选择 git bash here
输入 创建版本库命令 git init
命令: git init
输入完毕后,去文件夹查看
返回上一级目录.再看有无绿色对勾
如果有, 证明 以上你操作真确了.
Git之文件管理-添加文件
命令: git status
添加文件前,先用 git status 命令 查看当前git目录的版本状态
上图的意思是: 状态是在主分支上, 没有任何提交. 创建一个文件, 使用 git add 添加.
命令: git add
git add 文件名1 文件名2 把当前文件加入到暂存区
来和我一起操作吧.
使用 touch 命令创建一个hello.txt文件
Touch 直接意思是摸的意思, 计算机中 意译 为创建文件
执行完毕后,会在 文件夹中看到hello.txt 的空文件
如上图, 此时 hello.txt 没有任何 标记.
我们把这个空文件进行添加试试吧.
执行 git add 文件名 的命令
命令执行完毕后, 回退一个 文件夹, 看下 原本的绿色的对勾,变成 红色感叹号了
那么 我们再看下 git 的 状态.
是不是 和 刚刚的 显示不一样呢. 这里多了一个 hello.text 文件.
请记下这句话, 当命令 git add xxx yyy zzz 执行后, 文件被保存在了 git 的暂存区. 意思是 暂时存放的区域.
就好比你去看电影, 暂存区只是你现在买了票, 并未进入到 放映厅.
暂存区: 上图绿色的hello.txt文件代表现在暂存区有一个新的文件没有提交 提交之后才会进入版本库
命令: git commit -m 提交记录 m 代表 分支的名称
意思: 把暂存区里面的数据提交到当前所在的分支(master)
那么我们把这个 hello.txt 提交吧.
输入 git commit -master 命令
上面说1个文件改变. 执行成功后, 变绿了.. 又绿了….
绿了…绿了… git版本库绿了…
打开 hello.txt 编辑一段文字保存后, 记得一定要 ctrl +s , 会看到 文本的绿色变成了 感叹号的红色.
寓意,文件发生了版本的改变.
再次输入 git status 命令后,发现 黑框 变红. Modified 意思是 修改了.
如果 , 编辑的文字 不正确. 需要 退回到刚刚的 空文件的话. 需要执行上面的命令
命令: Git checkout – 文件名 这个是撤销的意思
暂存区中的反悔,撤销!!
红色感叹号 又回来了. 我们再次重新编辑他
重新编辑hello.txt 并保存, 然后 红色感叹号 又来了.
再次 执行 git add 并 git commit -master 提交.
命令: git log 看 日志
输入 git log 可以看到 提交次数和时间
命令: git log --pretty=oneline 按行显示
命令: git reset --hard HEAD^ 回退到上一个版本
如果觉得当前(第二次提交) 提交不太好, 想回退上一个版本 , 执行上面的命令.
回退到了 第一次 空的 提交
下面 多修改文件 多提交几次.
注意: 这次加了 备注, 第二次提交
继续修改文件, 提交
查看 日志 git log --pretty=oneline
这次 我们回退到 指定 版本号 比如 c9b9…
命令: git reset --hard cb5f6we4234443242342342342 回退到指定的版本号
又回到了 第一次 提交的 空文件了.
Head 是 指向的意思. 脑袋的意思.
Git之工作区和暂存区
Add 命令后
使用commit
注意: HEAD 默认 最新的提交.
Git之查看修改后的文件
命令: git diff head -- 文件名
对文件做出修改,保存后,输入命令查看
Git之撤销修改(回退版本) 重要!!!
情况1:数据只存在工作区
git checkout -- hello.txt 丢弃工作区修改
情况2:数据使用add 添加到暂存区
思路:先从暂存区里面移除相应的文件, 再使用情况1的方式丢弃
- 修改文件 , add 一下
-
查看下他的头在哪里,
- 解决: 1. 先回到他的 Head 头上面(作用, 把文件从暂存区撤回出去)
- 2.再用 get checkout – hello.txt 的方法回退
-
改完, 颜色成 绿色对勾.
情况3:数据使用add 添加到暂存区并commit到版本库
思路: 版本回退的方式 git reset –hard xxxx
思路: 版本回退的方式 git reset –hard xxxx
回退版本完成后, 文件夹又成空了
情况4: 数据已经提交到远程仓库了.
思路: 无法挽救,神仙难撤回
Git之文件的删除 命令 git rm -rf 文件名
先删除
命令: git rm -rf 文件名
再提交
Git commit -m 备注
右键删除.
还需要提交一下,才能删除.
直接删除 不行,不然无法提交.
需要用 命令删除一次
然后再提交
分支管理-创建与合并分支
相关命令:
命令: git branch 查看所有分支
命令: git branch dev 创建一个叫dev的分支,不切换
命令: git checkout dev 切换到一个叫dev的分支
命令: git checkout -b mytest 创建mytest 分支并切换到mytest 分支
命令: git branch -d mytest删除mytest分支
如果 本身在 mytest , 则删除不了, 需要切换到其他分支, 去删除另外的分支
命令: git merge dev 合并分支
如把dev合并到master那么要在master分支上执行合并的命令
切换到 dev , 添加文件,并保存.
切换到 master , 合并
分支测试
切换到 dev 分支下,并新建一个文件提交
在切换到 master 下 , 会看到 文件 dev分支2.txt 没有了., 这就是不同分支的好处
再切换到 dev , 文件又 回来了
分支冲突(原因,2个分支同时操作一个文件了)
2个分支 都有一个 文件名字一样的 文件, 文件中的内容不同时候,则起了冲突
合并后 出现问题
变成了 合并中.
文件也变成了
通过 git status 发现 both 同时 添加了…
分支冲突解决(手动改正,重新 add,提交)
分支策略
通常,合并分支时,如果没有分歧解决,就会直接移动文件指针,这就是Fast forward模式。
上面没分歧的时候 可以看到. 是 fast forward 模式
举例来说,开发一直在master分支进行,但忽然有一个新的想法,于是新建了一个dev的分支,并在其上进行一系列提交,完成时,回到master分支,此时,master分支在创建dev分支之后并未产生任何新的commit。此时的合并就叫fast forward。
但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
强制禁用Fast forward模式的具体方法
下面我们实战一下--no-ff方式的git merge:
首先,仍然创建并切换dev分支:
$ git checkout -b dev1
Switched to a new branch 'dev1'
修改readme.txt文件,并提交一个新的commit:
$ git commit -m "添加dev1上的修改内容"
[dev 8bee24d] 添加dev1上的修改内容
1 file changed, 2 insertions(+)
现在,我们切换回master:
$ git checkout master
Switched to branch 'master'
准备合并dev1分支,请注意--no-ff参数,表示禁用Fast forward:
$ git merge --no-ff -m "merge with no-ff" dev1
Merge made by the 'recursive' strategy.
readme.txt | 1 +
1 file changed, 1 insertion(+)
因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
合并后,我们用git log看看分支历史:
$ git log --graph --pretty=oneline --abbrev-commit
* e1e9c68 (HEAD -> master) merge with no-ff
|\
| * f52c633 (dev) add merge
|/
* cf810e4 conflict fixed
...
可以看到,不使用Fast forward模式,merge后就像这样:
可以看到,不使用Fast forward模式,merge后就像这样:
分支策略
在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
所以,团队合作的分支看起来就像这样:
分支管理-Bug分支
使用场景
现有主分支master
从主分支切了一个dev分支开发一个新的NB的功能。。。但是还只写了一半
领导说线上和master项目有重大bug请速度解决。你看了一,这个bug5分钟可解决,
但是我还在开发新功能,但没有提交
需要把当前dev分支的工作现场储藏起来
切到master 切一个issue的bug分支出来解决bug
解决完之后回到master再合并issue分支。再删除issue的分支
相关命令
命令: git stash 储藏当前分支的工作区
储藏完成这后再执行git status发现工作区tree clean
命令: git stash list 显示当前分支储藏的工作区的集合
命令: git stash pop取出当前分支储藏的工作区栈顶的第一个储藏对象
Git工作示意图
使用GitHub远程仓库
Git命令
Git clone和直接下载zip的异同点
- 直接下载zip包:直接下载zip包就相当于你切断了与gitee上的代码的联系,单纯的就是获得了一个工程文件,如果你想直接pull或者push的话都是不行的
- git clone:而这个git clone的话git会先在你的当前文件夹建立一个本地仓库,然后再去复制这个工程,这个时候在这个文件夹下面就是可以直接git pull或者push的
-
所以,如果你只是想下载工程文件,那么直接下载zip会简单一些,如果你想往这个开源项目上添砖加瓦,那还是git clone会好一些哦~
it会先在你的当前文件夹建立一个本地仓库,然后再去复制这个工程,这个时候在这个文件夹下面就是可以直接git pull或者push的
所以,如果你只是想下载工程文件,那么直接下载zip会简单一些,如果你想往这个开源项目上添砖加瓦,那还是git clone会好一些哦~
内容取自导师谢欣 的课件

被折叠的 条评论
为什么被折叠?



