admin 管理员组文章数量: 887021
版本控制
目录
- 安装Git
- 创建仓库
- 初始化一个裸仓库
- 从中央服务器的数据拉倒本地来
- git的原理---git的四个区域
- 实操
- 用add加到暂存区中
- 再从暂存区放到本地仓库
- 通过git log查看提交信息
- 推送到远端仓库
- 逆向操作
- 从暂存区退到工作区
- 从本地仓库退回
- reset命令参数说明
- 整理操作
- 修改上次的提交
- 使用git rebase整理多次提交
- 实例:
- 解决冲突
- 实例
- 补充
- 创建新分支
安装Git
Git安装连接
无脑下一步即可
创建仓库
安装完成后,在电脑上找一个地方新建文件夹,进入,在当文件夹下,右键->选择"Git Bash Hare"
当安装完 Git 应该做的第一件事就是设置你的用户名称与邮件地址。 这样做很重要,因为每一个 Git 的提交都会
使用这些信息,并且它会写入到你的每一次提交中,不可更改:
git config --global user.name “username”
git config --global user.email 1xxxxxx@gmail.com
初始化一个裸仓库
git init --bare
其中–bare就是声明一个裸仓库
请注意,这里"裸"仓库跟普通仓库是不同的,区别在于:
裸仓库一般是是远端或者中央使用,里面是看不到代码的(比如远端仓库被攻击,就算黑客拿到git属于,依然看不到代码),只有一些版本信息
普通仓库类似于本地仓库,里边是有代码的
从中央服务器的数据拉倒本地来
刚刚创建的裸仓库就是一个中央仓库,拉倒本地,执行如下命令,注意,这里命令执行环境是本机,也就是说裸仓和本地都在一台主机上
同样,新建一个文件夹,右键->“Git Bash Here”
git clone F:/All_Code/git-remote repo-a
//克隆 来自xxx/(注意用反斜杠) repo-a是别名
非本机远端仓库
git clone 用户名@ip:/path/...
git的原理—git的四个区域
Workspace: 工作区,就是你平时存放项目代码的地方
Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
Repository: 仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本。也就是本地仓库
Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换
实操
在repo-a文件夹(本地仓库)下创建一个.c文件
作为第一次版本
#inlcude <stdio.h>int main()
{return 0;
}
用add加到暂存区中
git add hello.c
可以通过下面命令查看当他文件的状态
git status
再从暂存区放到本地仓库
执行
git commit hello.c -m "first commit"
//""中的内容是提交的说明.可以自定义内容
通过git log查看提交信息
执行
git log
分别说明图中的内容
1.40位的字符串,提交文件的时候,通过哈希算法,生成一个哈希值,用来代表本次提交.
2.HEAD表示当前最新提交的指针,->master代表当前的分支(可以创建多个)
3.用户名,邮箱 : 唯一标识 , 本次是谁提交的
4.日期
5.本次提交的注释,这次做了那些工作...
推送到远端仓库
执行
git push origin master
//origin : 别名
//master : 分支
推送成功,怎么查看呢,由于远程仓库中没有代码文件,这时候,我们可以在创建一个本地仓库,来模拟你的同事,或是其他人访问远程仓库,看看刚刚代码有没有创建成功.
同创建repo-a的步骤,创建一个repo-b
执行
可以看到,hello.c已经成功克隆到repo-b,这也说明repo-a成功push到远端仓库了
逆向操作
以上提交成功,这里都是正向操作,很多时候可能提交错误等等原因,需要逆向操作,比如怎么从暂存区退到工作区,从远程仓库退回来等等,下面看操作
从暂存区退到工作区
创建一个world.c方便演示,代码随便写
先放到暂存区
git add world.c
现在退回去
执行
git restore -S world.c
这样就退回去了
用git status查看状态
git status
从本地仓库退回
还是,先提交上去
git add world.c
git commit world.c -m "first commit world.c"
好,现在已经提交到本地仓库了
查看一下本地仓库的状态
执行
git reset head~1
//head~1 : 退回1个版本,默认是1 ,可以使用reflog查看差多少版本
成功从本地仓库退回
reset命令参数说明
git reset --mixed head~1 //缺省值,退回到工作区中,依然可以看到上次更改的内容
git reset --soft head~1 //退到暂存区
git reset --hard head~1 //直接抹除上一次的提交,包括你的更改内容,也会被删掉
整理操作
修改上次的提交
修理操作: 修改上次的注释
git commit --amend
此功能可以用于附加到上一次提交
在上次提交之后更新内容,比如修改内容很少,可以不用新增一次提交记录,执行此命令,可以将更新附加到上一次(只能用于最近的一次提交)
使用git rebase整理多次提交
如果想要整理以前的一些提交可以使用如下命令:
实例:
第一次更改,加了一个wor
#inlcude <stdio.h>int main()
{printf("Hello Wor");return 0;
}
第二次更改,加了一个ld
#inlcude <stdio.h>int main()
{printf("Hello World");return 0;
}
提交到本地仓库并加上注释,如下图,下面我想合并这两个操作
git rebase -i f3ee693
//^:前一个版本, ~:后一个版本
//f3ee693是7位哈希值
//f3ee693表示,整理f3ee693之后的所有版本,但不包括f3ee693
下图可以方便理解此行代码
执行后
讲pick改成s,表示这个提交跟上一个合并
使用:x 保存并退出,关于x和wq的区别,可以百度
这时候会弹出一个新的文本,如下图
如下图,把两行合并成一行,addworld,同样用:x退出
git log查看
合并成功
如果有多个提交,比如pick下有多个s,或是其他更改参数,可以使用如下命令进行继续提交(会自动弹出)
git rebase --continue
解决冲突
通过repo-b模拟你的同事和你共同修改一个world.c文件
实例
下面用repo-b修改
#inlcude <stdio.h>int main()
{printf("Hello world");return 0;
}
添加一行
#inlcude <stdio.h>int main()
{printf("Hello world");printf("I am repo-b");return 0;
}
提交到远端
git add world.c
git commit world.c -m "add I am repo-b"
同时, repo-a也修改一下,保存
#inlcude <stdio.h>int main()
{printf("Hello world");printf("I am repo-a");return 0;
}
提交前,一般都会用pull拉下来(拉下来的内容中有repo-b的修改)新的代码,这时候冲突就产生了
git commit world.c -m "test" //先commit
git pull
如图
产生冲突文件
自己可以权衡删哪个,或者都要,如下
删掉多余部分即可,提交命令如下
git add world.c
git commit //系统可以识别出你当前是在解决冲突
//执行后会弹出, 用于记录本次更新的注释//提交到远程仓库
git push origin master
完成
在repo-b下,重新git pull下来,可以看到,repo-b中也被修改了.
补充
Angular 团队的规范
message的格式:
<type>(<scope>): <subject><BLANK LINE> <body> <BLANK LINE> <footer>
Type指:
feat: 新特性
fix: 修改问题
refactor: 代码重构
docs: 文档修改
style: 代码格式修改, 注意不是 css 修改
test: 测试用例修改
chore: 其他修改, 比如构建流程, 依赖管理.
创建新分支
创建一个develop分支
git branch develop
选择分支
git checkout develop
选择一个bug/timer分支,如果不存在就创建,使用-b参数
git checkout -b bug/timer
合并到master
在bug/timer分支下修改一点代码,随便打印一行
#inlcude <stdio.h>int main()
{printf("Hello world");printf("I am repo-a");printf("I am repo-b");printf("我修改了一个timer类型的bug");return 0;
}
git add world.c
git push origin bug/timer //上传到远端仓库
检查无误后,合并到master
//先切换到master
git checkout master
//合并
git merge bug/timergit push
合并完成,并推送到了远端仓库
本文标签: 版本控制
版权声明:本文标题:版本控制 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1686523651h5689.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论