git学习笔记

Git学习

SVN集中式版本控制:数据各版本备份都集中存储在一个中央服务器上,工作时从服务器上下下来工作完再传回。(需联网才能工作)

Git分布式版本控制:没有中央服务器,每个人的电脑都是完整版本库,协同开发时只需要拉取一下就能别人改了哪里。(工作时不需联网)

总共四个工作空间。但实际上主要管理第一个workspace(本地存源代码的目录)和第四个remote(远程仓库)  中间这两个基本用不到  第二个是暂存区(用于临时存放改动,就是个文件)第三个是本地仓库区(安全存放数据的地方,有所有版本数据,head指向最新版本)

 

1.本地库

不管使用何种方式(两种初始化方式init和clone)初始化一个Git本地版本库,实际上都是在项目根目录下创建了一个.git文件夹。直接在对应文件夹下右键git bash  clone会直接clone到本文件夹下。

git status   // 查看文件状态

git add .    //提交所有文件到暂存区  (VS里点+号 进入到暂存列表)

git commit -m  “消息内容”  // 提交暂存区的内容commit是到本地仓库   (VS里点对勾  将暂存列表文件加入仓库  强制写一些修改信息)   

(远程:在加入仓库之后才可以推送到giteee (三个点那个按钮推送))

项目回到之前的状态

git log # 查看当前HEAD之前的提交记录,便于回到过去

git reset --hard HEAD^^/HEAD~100/commit-id/commit-id的头几个字符 # 回退  (HEAD~n:为回退几个版本)   (commit-id是log和reflog会显示的版本号指定回到哪个版本)

git reflog # 可以查看当前HEAD之后的提交记录,便于回到未来

git reset --hard commit-id/commit-id的头几个字符 # 回退

git revert HEAD^^/HEAD~100/commit-id/commit-id # 通过提交新的commit方式来回滚(就是将先commit当前记录再reset)

这些都是用于本地的

2.远程库

一般就是gitclone和gitpush就行  但有时就是会出现版本冲突(想避免也简单就是串行开发,每次都先git pull下原版本再操作再push)就需要用gitmerge  gitpull则是fetch和merge的合并。

  clone一般是第一次和pull是之后更新的那种感觉。

 

两种修改每次修改前先同步git pull就不会冲突。(深一点理解为啥不允许push就是怕不同步情况下两边都有修改他不知道听谁的,直接覆盖可能有一些修改会丢失)

合并merge的原理

 

H=(F-A)+G(还需解决冲突)

3.多人项目协作

再加强就是多人项目的分支管理

需要分支branch(branch是按时间线依次排列的一组提交记录(commit)),每个人或组完成一个相对独立的功能认定为一个branch,当完成的时候再合并,就可以减少因为多人合作开发而导致的频繁合并。

分支默认远程为 origin/master 和本地 master

一般流程就是先pull保证同步然后分出mybranch分支,完成mybranch分支功能,然后切回master分支(此时可以先pull一下originmaster)执行合并mybranch分支 一般得解决一些冲突(都修改了同一位置) 最后再赶快push会远程怕别人需使用。

指令:

git branch    检查当前所有所处分支
git checkout -b mybranch   创建并自动切到新创的分支 (图形化:点那三个点:点击分支:创建分支会自动切到新创的分支)

git checkout master  分支切换 (图形化:点那三个点:签出到选master)

git merge mybranch   在主分支master运行合并小分支操作(图形化:点那三个点:点击分支:合并分支)

默认为这种merge但推荐下面那种逻辑节点更清晰
git merge --no-ff mybranch   (无图形化)

 

4.修改美化提交记录树:

为了让 log 记录将来更容易回顾参考尽量每个记录节点都是一个某一个功能的完成而不是一次琐碎的提交可以使用git rebase来整理美化自己尚未提交到远程的提交记录树。

//指明自己要操作从哪到哪的记录节点
git rebase -i [startpoint] [endpoint]  //一般end不写默认到HEAD

git rebase -i HEAD^^^/HEAD~100       

具体流程:一般修改的是还没提交到远程的小branch记录树 所以先git checkout 到mybranch 先git log看自己要修改哪些记录节点,

git rebase -i HEAD~5 进入到rebase状态  

直接对rebase文档中的记录进行修改删减 保存并关掉rebase文件

此时一般要处理多个节点变一个产生的冲突,处理完冲突并用git add表示最终处理结果

此时可git rebase --continue 其实就是保存修改并退出rebase  或 git rebase --abort 撤销rebase并退出rebase

5.对于特殊的开源开发(较少)

对于开源社区管理人员松散没有绝对信任以上方法可能造成项目混乱 所以有了以下方法 (实际就是先拷贝源码回自己仓库然后自己修改强化项目,可将结果发起pull request发给原库,原库检查同意才把他merge进去)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值