GIT重学—基础知识

174 阅读6分钟

这是我参与更文挑战的第9天,活动详情查看: 更文挑战

常见的版本控制工具

  • GIT

  • SVN

  • CVS

    秉承一个原理:学习我们一定是学习当下最流行的

1, 前话

GIT版本控制的优点

1, 实现跨区域多人协同开发

2,追踪和记载一个或者多个文件的历史记录

3,组织和保护你的源代码和文档

4,统计工作量

5,并行开发,提高开发效率

6,跟踪记录这个软件开发的过程

2, 版本控制的分类

(1)本地版本控制

记录文件每次的更新,可以对每个版本做一个快照,或者是记录,适合个人

(2)集中版本控制(SVN)

所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改,用户的本地只有自己以前同步的版本,如果不连接网络,用户看不到历史版本,也无法切换版本,分支

(3)分布式版本控制(GIT)

每个人都拥有全部的代码!安全隐患

所有的版本信息仓库全部同步到本地的每一个用户,可以在本地查看所有版本,可以离线本地提交,不会因为服务器或者网络问题,导致不能工作的情况

GIT和SVN的区别

SVN 是集中式版本控制系统,版本库是集中放在中央服务器的,每次都是从中央服务器上获得最新版本,必须联网才能工作

GIT是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,

3, Git基本理论

Git 本地有三个工作区域,

(WorkSpace): 工作区,就是你平时存放项目代码的地方

(Index/Stage): 暂存区,就是临时存放你的改动,事实上就是一个文件

(Repository): 仓库去, 本地仓库,就是安全存放数据的位置,这里面有你提交的所有版本数据

(Remote): 远程仓库, 托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

对应的命令:

workspace写代码区 —>git add -> 暂存区—>git commit—>本地仓库—> git push —> 远程仓库

4, GIT 文件状态

Untracked: 未跟踪 —> git add .—> 暂存状态Staged

Unmodify: 未修改—> 版本库中的文件快照内容与文件夹完全一致

Modified: 文件已经修改, git add 进入Staged, git checkout 丢弃修改过,返回—>Unmodify

Staged: 暂存状态

5, 分支

# 列出所有的本地分支
  git branch
# 列出所有的远程分支
  git branch -r
# 新建一个分支,但依然停留在当前分支
  git checkout [new-branch]
# 新建一个分支,并切换到该分支
  git checkout -b [new-branch]
# 合并指定分支到当前分支
  git merge master
# 删除本地分支
  git branch -d [new-branch]
# 删除远程分支
  git push origin --delete [new-branch]

6, 常用

# 删除本地分支
  git branch -D test 
# 删除远程分支
  git push origin --delete test
# 撤回到指定的commit提交记录中
  git reset --hard commitId
# 远程拉取代码
  git fetch origin master
# 合并指定的提交
  git cherry-pick 62efcd
# git从一个仓库迁移到另外一个仓库
  git remote add origin2 master (给原创仓库起一个名称:origin2)
  git remote set-url origin2 http://xxxx.git (设置远程仓库origin2的地址)
  git push origin2 (把master仓库提交到远程仓库Origin2:master分支上)
# 取消本地目录下关联的远程库
  git remote remove origin
# 远程分支已经删除,但是git branch -a 依然显示
  1, 查看远程分支  git branch -r 
  2, 查看本地和远程分支的关系 git remote show origin 
  3, 删除所有远程污浊的分支     git remote prune origin
# 修改commit 提交注释
  git commit  --amend (修改当前最近的一次commit提交注释)
# 开发过程中标准必用的git命令 (merge方案)
  git status  -查看文件状态
  git add *   - 添加到缓存区
  git commit -m '本次提交解决什么问题'   (提交到本地仓库)
  git pull origin dev                 (更新远程分支到本地)
  git push origin dev                 (推送本地分支到远程)
  git checkout branch_stg_one         (切换分支)
  git merge dev                       (合并其他分支)

7, 配置

# 用户名,npm镜像配置
  git config --global user.email 'xxxx.com.cn'
  git config --global user.name 'xxxx'
  npm config set registry https://registry.npmjs.org/
  npm config set registry http://registry.npm.taobao.org/
  
# Git 简写配置
 1, cd ~   到根目录
 2, ls -al  查看根目录下所有的隐藏文件
 3, vim .gitconfig 直接打开编辑
 配置别名:
 [user]
        name = zhengliming
        email = zhengliming511@pingan.com.cn
 [alias] 
        br = branch
        st = status
        co = checkout
        ci = commit 
        ps = push 
        pl = pull
        mg = merge
        line = log --oneline
        pre = log --pretty=oneline
        cp = cherry-pick
        sa = stash
        tree = log --graph --pretty=oneline --abbrev-commit
 [pull]
        rebase = true
  
# 查看归档的细节
  git log -p
# 查看最近一次归档文件的改动细节
  git show
# 添加文件到暂存区的区别
    功能上看似很相近,但还是存在一点差别
   git add .  所有变化提交到暂存区,但不包括被删除的文件,并且会根据.gitignore做过滤
   git add *  同上,但是git add * 会忽略.gitignore把任何文件都加入
   git add -u 他会将被修改的文件提交到暂存区。add -u 不会提交新文件
   git add -A 提交所有变化
   
# git stash 缓存
  当你在dev上做开发的时候,这个时候项目出现了一个bug,需要紧急修复,但是你的项目刚开发完一般,还不想提
  交,这时候,可以用git stash ,命令 将修改的内容保存至堆栈中,然后顺利的切换到hotfix分支进行修复,完
  成后,再次切换到dev分支,从堆栈中恢复刚刚保存的内柔

 由于疏忽,本该在dev上开发的内容,却在master上进行了开发,你需要重新切到dev上开发,可以用 git stash 
 将内容保存到堆栈中,切回到dev分支后,再次恢复内容即可

1, git stash 
2,  git stash save '保存注释'
    、
    stash@{0}: On zlm: 0227
    stash@{1}: WIP on master: 14b03d3 update
    、
3,  git stash list  查看当前stash 内容
4,  git stash pop  将当前stash 中的内容弹出,并应用到当前分支对应的工作目录上去,会清空此次 暂存在
    堆栈中的内容
5,  git stash apply stash@{0}  将堆栈中的内容应该到当前目录,不同与git stash pop, 该命令不会将
    内容从堆栈中删除,可用于多个分支,堆栈中没有删除
6,  git stash drop stash@{0}   从堆栈中移除指定的stash
7,  git stash clear 情况堆栈中的内容
8,  git stash show stash@{0}  查看指定的stash和当前的目录差异
9,  git stash show stash@{0} -p 查看详细的不同
10, git stash branch 从最新的stash创建分支