Git基础

Git基础

1 基本概念

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。Git 是目前世界上最先进的分布式版本控制系统(没有之一)
GIT 和 SVN 的区别:
⚫ GIT 是分布式的,SVN 不是,这是 GIT 和其它非分布式的版本控制系统,例如 SVN,CVS 等 最核心的区别。
⚫ GIT 把内容按元数据方式存储,而 SVN 是按文件,所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs 等的文件夹里。
⚫ GIT 分支和 SVN 的分支不同:分支在 SVN 中一点不特别,就是版本库中的另外的一个目录。
⚫ GIT 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 GIT 缺少的最大的一个特征。
⚫ GIT 的内容完整性要优于 SVN:GIT 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

1.1 工作流程

工作流程
⚫ 克隆 Git 资源作为工作目录。
⚫ 在克隆的资源上添加或修改文件。
⚫ 如果其他人修改了,你可以更新资源。
⚫ 在提交前查看修改。
⚫ 提交修改。
⚫ 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。

1.2 几个概念

⚫ 工作区:就是你在电脑里能看到的目录。
⚫ 暂存区:英文叫 stage, 或 index。一般存放在 “.git 目录下” 下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
⚫ 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是 Git 的版本库
在这里插入图片描述
本地仓库由 git 维护的三棵“树”组成。第一个是你的 工作区,它持有实际文件;第二个是 暂存区(Index),它像个缓存区域,临时保存你的改动;最后是 HEAD,它指向你最后一次提交的结果。

2 安装配置

http://www.runoob.com/git/git-install-setup.html
作为 git 的基础配置,作用是告诉 git 你是谁,你输入的信息将出现在你创建的提交中。打开终端(Windows 打开安装 git 时安装的 git bash)执行如下命令,配置个人的用户名称和电子邮件地址:

$ git config --global user.name "runoob"
$ git config --global user.email test@runoob.com

连接服务器:
以连接码云为例讲解,因为国内基本都连接码云,速度比较快,介于 GitHub 已经被微软搞定,就不说连接 GitHub 了,流程基本一致。
码云官网: https://gitee.com/
自行注册账号。
码云的参考文档:http://git.mydoc.io/
连接码云的官方参考文档:http://git.mydoc.io/?t=180845

3 基本命令

  • git init:创建新仓库(有一个隐藏目录.git,不可删除)
  • git status:检测状态
  • git add filename/* /. :提出更改(添加到暂存区)
  • git commit -m “提交说明信息”:提交
  • git remote add origin< 远端仓库地址>:
    commit 的只是保存在了本地的仓库,为了和别人交换代码,我们需要提交代码到远端仓库(在码云)
  • git push origin master:推送
    如果在执行 git push orgin master 的时候报错
    在这里插入图片描述
    解决步骤:
    先执行:git pull origin master --allow-unrelated-histories
    再执行:git pull origin master(类似svn的update)
    再执行:git push origin master

第一次提交 需要输入码云的账号(用户名)和密码,输错了的话,他会一直记住错的密码,在哪儿修改呢???就要去电脑的控制面板–>用户账户–>管理Windows凭据,进去编辑就OK
在这里插入图片描述

  • git clone < 远程仓库地址>:克隆
  • .gitignore设置忽略文件
    强制添加忽略文件:git add -f info.log;git commit -m “强制提交”
  • git log:查看提交信息(有一个每一id)
  • git reset --hard HEAD^/HEAD ^ ^/HEAD~100:版本回滚(3.0回到2.0)
    HEAD表示当前版本
    git reset --hard 5fsfg:你想回到的那个版本 id的前6,7位,又可回到3.0版本
  • git checkout – filename:撤销文件在工作区的全部修改,回到之前的版本(–前后有空格)
    上面第一种情况很简单,要是我们已经提交修改到了暂存区,如果只是做上面的操作肯定不能回到之前的状态,那么还需要利用:git reset HEAD < file> 可以把暂存区的修改撤销掉(unstage) ,重新放回工作区。
    总结
    场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file.
    场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD < file>,就回到了场景1,第二步按场景1操作。
    场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节。
  • 删除
    一,直接 git rm filename 删除掉然后再提交 (正常删除)
    二,直接 git checkout --filename恢复到原来的版本 (失误删除)

4 分支基本操作

分支是用来将特性开发绝缘开来的。在你创建仓库的时候,master 是“默认的”分支。在其他分支上进行开发,完成后再将它们合并到主分支上。
分支的创建与合并
●查看分支: git branch
●创建分支: git branch < name>
●切换分支: git checkout < name>
●创建+切换分支: git checkout -b < name>
●合并某分支到当前分支: git merge < name>
●删除分支: git branch -d < name>

1 合并冲突解决方案

当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。用git log --graph命令可以看到分支合并图。

2 合并分支的模式

Fast-forward:这种模式删除分支后,会丢掉分支信息
加上参数–no-ff:普通模式合并,合并后的历史有分支,能看出来曾经做过合并

3 分支策略

首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;那在哪干活呢?干活都在dev分支上,也就是说,dev 分支是不稳定的,到某个时候,比如1.0 版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
在这里插入图片描述

4 bug分支

git add-----git stash(冻结)-------git stash list,git stash pop(解冻 并删除冻结区)

5 feature分支

软件开发中,总有无穷无尽的新的功能要不断添加进来。添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。
如果要丢弃一个没有被合并过的分支,可以通过git branch -D < name>强行删除。

6 分支的推送

●master分支是主分支,因此要时刻与远程同步;
●dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
●bug分支只用于在本地修复bug, 就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
●feature 分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

7 分支的抓取

抓取远程的dev分支:git checkout -b origin/dev
注意:如果此时改动origin/dev分支是提交不了的,因为本地没有dev分支所以我们必须先在本地创建一个dev分支然后git pull拉取,再git push就可以了。

总结:
●查看远程库信息, 使用git remote -v;
●本地新建的分支如果不推送到远程,对其他人就是不可见的;
●从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
●在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
●建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/ branch-name;
●从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

跟idea结合

远端设置
在这里插入图片描述

5 工具sourceTree使用

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值