分布式版本控制之git

12次阅读

共计 2638 个字符,预计需要花费 7 分钟才能阅读完成。

git

版本控制

1.git 简介:

- 特点:协同修改、数据备份、版本管理 (文件系统快照)、权限控制、历史记录、分支管理
- 优势:大部分操作本地完成、完整性保证 (hash 算法)、尽可能添加数据而不是删除或修改数据、分支操作便捷流畅、兼容 Linxu 命令
- git 结构:工作区 (写代码) > git add > 暂存区 (临时存储) > git commit > 本地库 (历史版本) > 远程库
- git 和代码托管中心 [维护远程仓库]:局域网环境下 -gitlab 服务器 (自己搭);外网环境 -github、码云
- 团队协作方式:-- 团队内部协作 [git push git clone git push git pull]
    -- 跨团队协作 [fork( 复制一份远程库)>clone>push>pull request> 审核 >merge]

2.git 命令行:

   - 本地库操作

       -- 本地库初始化:--- git init > .git 目录:存放本地库相关的文件和子目录,不要删除,尽量不要修改
           --- 设置签名:用户名、Email 地址 (和远程库账号密码没有任务关系)
               项目级别 / 仓库级别:仅在当前本地库有效 git config user.name/user.email                        信息保存位置:.git/config
               系统级别:登录当前操作系统的范围 git config --global
                       信息保存位置:~/.gitconfig
               级别优先级:就近原则 项目 > 系统

       -- 基本操作 (shift+ins=paste):--- git help command:查看本地文档帮助
           --- git status:查看工作区、暂存区状态 #
           --- git add : 工作区修改 > 暂存区 3
           --- git rm --cached:从暂存区撤销文件
           --- git commit $file > vim 提示输入提交信息
               git commit $file -m "First commit new file:test.txt" #
           --- git log: 查看历史版本信息 commit:hash 字符串标识一次历史提交;HEAD 指针:指向最新的提交
               git log --pretty=oneline 提交信息简洁的显示在一行
               git log --oneline
               git reflog
           --- git reset --hard $fe8986c: 基于索引的回退
               git reset --hard HEAD^: 只能后退  ^:1 step
               git reset --hard HEAD~3: 只能后退,后退 3 部
               --hard:本地库移动 HEAD 指针、重置暂存区、重置工作区
               --soft:仅仅在本地库移动 HEAD 指针
               --mixed: 在本地库移动 HEAD 指针,重置暂存区
           --- git reset --hard [指针位置] 通过历史记录进行版本控制,删除文件并找回;前提是文件存在时的状态提交到了本地库
           --- git diff: 比较文件差异
               git diff [file_name]: 工作区和暂存区文件比较
               git diff [history_version] [file_name]: 工作区和本地库文件比较
               git diff HEAD:所有文件的改变

       -- 分支管理:--- 版本控制过程中,使用多条线同时推进多个任务
           --- 优点:并行推进功能开发,提高效率;某个分支开发失败,不会影响其他分支,删除重写开始即可.
           --- git branch -v: 查看所有分支
           --- git branch branch_name:创建分支
           --- git checkout branch_name:切换分支
           --- 合并分支
               1.git checkout [branch_name]: 切换到接受修改的分支 (master)
               2.git merge [branch_name]: 执行 merge 命令,合并分支 (修改的分支)
               3. 解决冲突:多个分支修改同一个文件的同一个地方
                   冲突的表现:<<<<<HEAD 当前分支内容 ===== 另一分支内容 >>>>>> 分支名
                   冲突的解决:1> 编辑文件,删除特殊符号;2> 把文件修改到满意的程度, 保存退出;3>git add [file_name];4>git commit -m "log message". [commit 不能带文件名]
           --- 删除分支:1.git checkout [other branch_name]:切换到别的分支
               2.git branch -d [delete branch_name]: 删除分支
                   git branch -D [.....]: 强制删除分支
               3.git push origin --delete [delete branch_name]: 删除远程分支
               4.git fetch origin common_branch:common_branch: 从公用仓库 fetch 代码
               5.git checkout common_branch: 切换分支

       -- 远程库操作
           --- 创建远程库:0. 本地创建文件夹;
               1. 网页操作;
               2.git remote -v [查看远程库]
                 git remote add origin https://github.com/scott-teng/gitpro.git [新建别名 origin=url]
               3.git push origin master
           --- git clone: 作用 1、完整的把远程库下载到本地;2、创建 origin 远程地址别名;3、初始化本地库.
           --- 邀请成员加入团队
           --- git push: 提交
           --- git pull[远程地址 / 远程分支]=git fetch[remote repository][remote branch] + git merge[remote 别名 / 远程分支名]
                   git fetch: 只拉取,不合并;git fetch origin master
                                               git checkout origin/master
                   git merge: 合并                 git merge origin/master
           --- 解决冲突:非最新,不能推送,必须先拉取;若进入冲突状态,先解决冲突,在推送.
           --- debug:HEAD detached from XXX 游标脱离问题解决
           ---fork: 跨团队协作

       -- git workflow: 集中式、分支、fork
           --- 分支:master、develop、hotfix、release、feature

3.git 图形化界面

    - gitk

4.git 基本原理:

       - 哈希:一系列加密算法,加密强度不同,但存在共同点:1> 加密结果长度固定;
           2> 算法确定,输入数据确定,输出数据不变;
           3> 算法确定,输入变化,输出变化, 且变化较大;
           4> 不可逆;
           5> 可用来验证文件,Git 底层采用 SHA- 1 算法来跟踪历史记录;
       - git: 快照流, 每次提交更新时对当前全部文件制作一个快照,未更改的文件保存一个指针;

正文完
 0