Git的工作原理和流程

Git的工作原理和流程

安装完成git后,我们最好先把一些基础信息配置一下(只需要配置一次即可)
git config -l 查看当前本机git的配置清单
[相对比较重要的配置:user.name/user.email,每次提交的时候我们需要知道谁提交的]
git config --global 在全局下配置
git config --global user.name xxx
git config --global user.name xxx
设置的用户名和邮箱可以随便写,但是建议最好写github/codding等平台的账号和邮箱

git的工作流程

git是分布式版本控制系统,每一台客户端都是一个独立的git仓库(在git工作的全套机制)
一个git仓库分为三个区域
1.工作区:平时写代码的地方
2.暂存区,把一些写好的代码暂时存储的地方
3.历史区:生成一个个版本记录的地方

创建Git仓库

在指定目录中,执行git init,相当于以当前目录作为基础,创建了一个本地git仓库
创建完成后,会在项目到根目录中展示.git这个文件(隐藏文件):有这个.git文件的才叫git仓库,没有则不能被成为git仓库(因为暂存区和历史区的内容都是存储在这个文件夹中的)

把工作区的内容提交到暂存区

git add xxx 把某个文件提交到暂存区
git add . 把所有修改的文件(修改和新增的包含,删除的不包含)
git add -u 把所有修改的文件(包含修改和删除的,但是不包括新增的)
git add -A 是点和U的结合体,所有修改、新增、删除的信息都会提交到暂存区(但是真实效果中两者效果差不多,用哪个都可以)

git status 查看当前文件到状态
红色:在工作区还没有提交到暂存区
绿色:在工作区还没有提交到历史区

如果在提交内容的时候,有些内容并不想提交,我们可以增加git提交的忽略文件:.gitgnore(没有文件名只有后缀名)

把暂存区内容提交到历史区

git commit
git commit -m “xxx”
git commit -a -m “xxx” 把提交到暂存区和提交到历史区的步骤合在一起完成

  • 这种方式只适合已经提交过至少一次的文件,被修改后,我们可以这样快速提交
  • 对于新增加的文件,一次都没有提交过,是不允许这样操作的

[root-commit]根提交
简单理解为,第一次提交到历史区域;如果我们创建一个新的仓库,但是没有做过根提交,此时我们仓库中没有任何的分支(哪怕是master),也就不存在所谓的分支切换(当前仓库还不完整:一个工作流程走完一遍才算完整)

// =>.gitgnore中的信息
.idea  // =>使用wb打开项目或者编辑项目,自动会生成的文件 
node_modules //=>使用npm安装模版的时候,当前安装在项目中的模块都在这个文件夹中(之所以也忽略提交是因为这里的内容太多了)
.DS_Store
.......

工作流中的一些细节知识

不管是从工作区提交到暂存区,还是从暂存区提交到历史区,每一个区域当前的内容是一直保存下来的,不会消失
git log/git reflog 都是查看历史提交记录(也是相当于查看历史版本,在没有历史版本回滚的时候,我们用哪个都可以,有历史版本回滚,git log只能查看当前回退版本以前的版本)

git rm --cache . -r

可以把·替换为具体的文件名,从暂存区把所有内容(或者是你指定的具体文件)都撤回到工作区

  • 不管暂存区中的内容是否已经提交到历史版本上了
  • 也不管是你第几次放到暂存区的
    通通撤回,这种方式太暴力了,我们用的很少

git checkout .

把暂存区内容撤回工作区(覆盖现有工作区中的内容,无法找回),也可以理解为,用上一个暂存区存储的内容覆盖现有工作区中的内容,暂存区内容还在

问题:只能限制当前代码还没有提交的情况,当前代码没提交回滚的是上一次提交到暂存区的内容(和工作区内容不一样);如果当前这次也提交了,暂存区和工作区一样了,回滚回来也是一样,这个方式就解决不了;

此时需要我们:
1.在暂存区中,回滚到上一次暂存区中记录到内容(暂存区先回滚一次)
git reset HEAD .
2.把最新暂存区的信息回滚到工作区,替换工作区内容
git checkout .

git add .
git commit -m “第一次提交”
修改后 git add .
git reset HEAD .
代码就会在“第一次提交”的时候

git diff

工作区 VS 暂存区:git diff
工作区 VS 历史区:git diff master
暂存区 VS 历史区:git diff --cached

查看不同区域之间代码的不同,我们一般都是基于
可视化的页面来查看不一样的

最重要的一个回滚代码技巧:

git log 可以查看版本号
回滚时候指定的版本号不一定要全截,有七八位即可
当我们回滚到某一个历史版本之后,暂存区和工作区的内容都将被这个版本内容所代替

  • 代码回滚操作
    git checkout . 把暂存区内容回滚到工作区(一旦回滚,工作区内容无法恢复)
    git reset HEAD . 把当前暂存区的内容回滚到上一个暂存区,目的是为了把上一个暂存区内容回滚到工作区
    git reset --hard 版本号 在历史区中回退到某一个版本(强制把暂存区和工作区都变成回退后的版本)
    history > xxx.txt 把历史操作步骤输出

团队协作开发下的git操作

前面讲的都是单独开发,在自己本地操作git仓库的一系列操作流程,团队协作开发之下,流程上还是有所区别的
1、创建中央仓库
一般是由团队技术LEADER或者指派的人完成的,仓库中默认是有一些初始化文件的
中央仓库可能在:github、Coding、自己公司的git仓库服务平台、自己公司的服务器等…

【1】
基于gitHub创建远程仓库,创建完成后,会生成个远程地址,例如:https://sssssss.git
【2】
作为leader,还需要把项目中一些基本的信息提交到远程仓库上

  • 在自己本地创建一个仓库,把一些基础内容都放在仓库中
  • 把新增加的信息提交到本地仓库历史区汇总
  • 让本地仓库和远程仓库保持关联
  • 把本地仓库历史区中到信息同步(推送)到远程仓库

让本地仓库和远程仓库保持关联:
git remote add 名字(一般都叫做origin) 远程仓库地址
git remote rm 名字 移除关联
git remote -v 查看当前仓库和哪些远程仓库保持关联

让本地历史区信息和远程仓库信息保持同步:
git push origin master 把本地信息推送到远程上
git pull origin master 把远程的拉取到本地
(origin 是我们本地和远程仓库关联到名字,master是远程仓库分支)

当然我们创建完成远程仓库后,可以直接通过 git clone 仓库地址 仓库别名(可以不写) 的方式把远程仓库克隆到本地
相当于在本地创建了一个仓库
也让本地这个仓库和远程仓库保持了连接(名字:origin)
也把远程仓库中现有到内容克隆到了本地

无分支模式下到团队协作

作为开发者每天来的第一件事或者提交代码之前,都要先pull一下
【如果远程仓库和本地仓库不是同一个文件同一行代码】

  • git会自动依赖于Fast-forward
    自动合并后,我们重新提交即可git add /git commit /push…

【同一个文件的同一行代码冲突】
找到冲突的文件,留下自己想要的代码
不管之前是否commit过,都要重新的commit,然后push即可

单独分支管理

1.每天第一件事情,就是创建一个dev分支,并且切换到这个分支
2.正常到开发代码,把每天开发到任务都先提交到自己的分支上
3.提交到远程仓库上
=》 把本地自己分支中到内容,合并到本地自己的master分支下
=》 把自己本地创建的分支删除(可以不删除,但是有的公司不希望远程中出现分支,或者避免开发人员的分支冲突,提交之前都要把自己创建的分支删除掉)
4.和第一种只使用master分支一样了,把本地最新合并的master分支代码,提交到远程仓库的master分支下(冲突合并即可)

操作分支的基础命令:
git branch 查看现有的分支
git branch xxx创建一个新的分支
git checkout xxx切换到某个分支上,当创建到某个分支上的时候,会把当前master分支中的新信息同步到这个分支
git checkout -b xxx 创建一个新分支并且切换到这个分支上
git branch -D xxx删除某个分支(一定要切换到其他分支上才可以删除当前分支)
git merge xxx 合并xxx分支
git log --graph/--onelone 在有分支的情况下,可以更清楚查看分支的提交和内容

github界面操作

给别的仓库提交代码修改或者建议

1.首先fork别人的仓库

  • 把别人的仓库克隆一份一摸一样的代码,放到自己的账号中,变成自己的仓库(我们平时可以修改自己仓库的源码)
  • fork的仓库和别人原始的仓库会默认建立一些关系,我们可以把自己仓库中和别人仓库中不一样的地方,提交给别人(pull-request)

2、把自己fork的仓库,克隆到本地

  • 以后有一些新的代码心得,可以自己尝试去修改,然后同步到自己fork的仓库中

3.在github中发送new pull request

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值