设为首页 收藏本站
查看: 1311|回复: 1

[经验分享] git基础知识

[复制链接]
累计签到:224 天
连续签到:4 天
发表于 2019-11-27 16:30:25 | 显示全部楼层 |阅读模式
# git(分布式版本管理系统)

## 创建仓库

仓库其实就是你需要跟踪管理的文件夹。
成功创建仓库之后,目标文件夹下面有一个.git的隐藏文件夹,这个文件夹是用来管理文件的,不可以一改动。

### git init

在目标文件夹下面,运行git init完成仓库的创建。

tips: git只能跟踪文本文件。

### 添加文件到仓库

- 第一步:git add 文件/*
- 第二步:git commit -m "msg"
提交文件到仓库

## 查看仓库状态

### git status 查看仓库状态,哪些
文件被修改过。

### git diff 查看修改的内容
对比做了哪些修改

## 版本回滚

### 当前版本用HEAD表示

- HEAD^ 表示上一版本
- HEAD^^ 表示上上一版本
- HEAD~n表示之前的第n个版本
例如前第一个100个版本:
HEAD~100

### 在步同版本之前切换
git reset --hard commit_id

### 查看版本操作记录

- git log 打印commit 记录
git log pretty='oneline' 简化commit 打印记录日子
- git reflog查看命令历史

### 什么是工作区

- 工作区就是被git init初始化后你能看到的工作目录,隐藏文件夹.git不是工作区,这是git的版本库,里面包含了stage (暂存区)默认创建的master分支、HEAD指针。

### Stage缓存区

- 在.git文件夹下包含一个非常重要的Stage即缓存区,所有修改的文件要提交到版本库,必须先把文件放到缓存区,缓存区的文件将一次性commit到当前对应的分支里。
- commit之后,如果没有对工作区的文件做修改,此时的缓存区是干净的,可以通过git status查看当前状态。

### 管理修改

- git对文件修改的管理方式修改后的文件
只有add到缓存区才可被提交,git跟踪的是文件修改而不是文件本身。

### 撤销修改

- 修改的文件未提交到暂时区

        - 第一种方式:手动恢复修改过的文件内容
        - 第二种方式:git checkout -- 文件名
该操作将把文件撤回到最近一次commit
的状态。

- 已提交到缓存区

        - 第一步:运行git reset HEAD 文件名
把修改从缓存区撤回到工作区

          git rest可用于回退版本,git rest --hard commit_id
          
          同时也可以用于将缓存区的文件撤回到工作区
          git rest HEAD 文件路径/文件名

        - 第二步:git checkout -- 文件路径/文件名

### 删除文件

- 未添加到版本库的文件是不能用git恢复的
- 删除文件的选择

        - 确实需要从版本库中删除该文件
运行如下命令:
git rm  文件路径/文件名 或者
git add 文件路径/文件名
最后git commit
        - 误删除的情况,直接运用
git checkout -- 文件,撤销删除操作

### 远程仓库

作为分布式版本控制系统,同一个git仓库可以分布在不同的机器上。允许自己和有权限的成员克隆远程仓库到本地,也可以拉取别人修改的文件,还可以把自己的文件推送到远程。
常见的远程Git 仓库服务平台有github、码云等。

- 添加远程仓库

        - git remote add 远程仓库名字  远程仓库地址

                - 远程仓库的名字可以自己设置城任意字符串
                - 远程仓库地址可以是http的 也可以是ssh的,一般都是用ssh的,用ssh的仓库地址需要在仓库添加自己的公钥。

        - 操作远程仓库

                - 向远程仓库推送代码

                        - git push 远程仓库名 分支名
例:git push origin master

                - 克隆远程仓库到本地

                        - git clone 远程仓库地址

                          克隆就是把远程仓库复制一份快照到本地。

                - 拉取远程仓库内容

                        - git pull 远程仓库 想要拉取的分支名
例:git pull origin master

## 分支管理

### 创建分支
git branch 分支名

### 切换分支
git checkout 分支名

### 创建并切换分支
git checkout -b 分支名

### 查看分支:git branch
查看所有分支包括本地和远程分支:
git branch -a

### 合并某分支到当前分支
git merge 分支名

- 快速合并模式
Fast-forward

  Fast-forward 模式合并只是把指针移动最新的指针处。
  适用于Fast-forward合并的情况例如:
  从master分支创建一个分支 debug,在debug分支编辑完成提交完成,切回master分支,如果master分支上的内容自从创建debug分支后没有做任何编辑包括没有其他人提交或合并内容在master分支上,此时在master分支运行:
  git merge debug ,这次merge将采用
  Fast-forward模式合并,即把master的HEAD指针直接移动到debug最新的提交点。

- 解决冲突

  合并发生冲突是因为两个分支对同一个文件的做了修改,git不知道以那个为主,必须要你手动解决。发生了冲突的合并是不能通过Fast-forward合并的,只有手动解决完了冲突之后,git会结合两个分支的内容提交到一个节点。

- 查看分支合并图:
git log  --graph

### 删除分支
git branch -d 分支名

## 分支管理策略

### 强制禁用Fast-forward合并
git merge --no-ff -m "msg" 分支
禁用ff合并,git会在合并后生成一个新的
commit

### 分支管理的策略一般把master作为一个稳定的分支,用于版本的发布。协作开发和成员代码合并在dev分支进行。最后在统一将dev分支合并到master主分支上。

## bug分支

### 要解决那个分支上的bug就在那个分支上创建bug分支

## 存储

### 当前分支工作还未完成,但需要切到其他分支解决bug,你可以提交当前分支的修改后在切到其他分支修bug,还有一种方式(比较推荐)把当前分支工作区修改存储起来,这里就用到git的存储功能

- 把当前工作区存储:
git stash
- 查看存储区的内容:
git stash list
- 恢复储存区内容

        - git stash apply
恢复工作区内容,但stash内容并不会被删除
        - git stash drop 删除存储区内容
        - git stash pop
恢复并删除工作区内容
        - 可以多次git stash,被存储的内容益堆栈形式存储起来,即git stash drop /git stash apply时默认恢复第一个存储的内容,可以指定存储区id恢复指定版本的存储内容,例如:
git stash apply stash@{1}

## 开发新功能的分支

### 要开发新功能,最好创建一个feature分支

### 强行删除一个分支:
git branch -D 分支名

## 多人协作

### git remote -v 查看远程库信息

### 从本地推送分支git push origin 分支,如果失败先git pull再推送。如果git pull 有冲突,解决冲突后再push。可以用git push -f origin 分支 强行把本地分支推到远程,该-f命令表示推送的分支内容以本地推送的为主。

### 在本地创建和远程对应的分支:
git checkout -b 分支名 origin/分支名

### 建立本地分支与远程分支的联系
git branch --set-upstream 分支名 origin/分支名

### 从远程抓去分支
git pull

## rebase

### 把分叉的commit整理成一条直线,
缺点是rebase后本地的commit 记录会被修改。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-989029-1-1.html 上篇帖子: Centos搭建Git服务 下篇帖子: 开发常用的npm命令
累计签到:224 天
连续签到:4 天
 楼主| 发表于 2019-11-27 16:30:38 | 显示全部楼层
6666666666

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表