版本控制

一、版本管理的演变

1. 未出现版本控制

用目录拷贝区分不同版本,公共文件容易被覆盖,成员沟通成本高、效率低下

2. 集中式VCS

有集中的版本管理服务器,具备文件版本管理和分支管理的能力,但是客户端必须时刻与服务器相连(本地只有一部分版本,只能通过服务器查询整个项目的情况)。如:CAS、SVN

img

3. 分布式VCS

服务端和客户端都具有完整的版本库,查看历史版本等操作不需要访问服务器,比集中式VCS更能提高版本管理效率。如:Git等

img

Git、GitHub、GitLab的区别?

GitHub、GitLab都是基于Web的Git仓库,代码托管平台。Git是版本控制系统,是一种工具,用于代码的版本控制和存储。

相关资料:https://blog.cutepig.net/archives/amp/423

二、Git相关知识

1. Git基础

1.1. Git的安装及配置

  1. 安装Git,安装好后 git --version 查看git 的版本。
  2. Git的相关设置:
1
2
git config --global user.name 'your_name'
git config --global user.email 'your_email'

通过以上命令设置全局用户名和邮箱,复查代码可以通知对应的提交人员

Git的配置范围(默认local,范围越小优先级越高)

git config --local local:设置在当前仓库有效

git config --globalglobal:设置在该用户有效

git config --systemsystem:设置在多用户有效

查看Git的配置

1
git config --list --范围(local/global/system)

1.2. Git的常用命令

  1. 创建Git仓库

git init在当前文件初始化Git仓库

git init 文件夹名在当前文件夹下创建该文件并初始化Git仓库

  1. 查看状态

git status 查看文件的状态

  1. 查看文件之间的差异

git diff --cached xx 查看暂存区的变化

git diff xx 查看当前工作区和暂存区之间的差异

  1. 提交更新

git add filename 将文件提交到暂存区

git add -u 将已管理并且修改的文件都进行暂存

git commit -m '' 提交暂存区中的文件

  1. 删除文件

git rm filename 将删除对应的文件暂存到缓冲区(工作目录也会删除对应的文件)

git rm --cached filename 只从暂存区移除,工作区不删除

  1. 修改文件名

mv filename newFilename
git rm filename
git add newFilename

总结:git mv filename newFilename

  1. 查看提交历史

git log 按时间顺序列出所有提交,最近的在最上面

git log --online 查看简洁信息(每个提交信息在一行中显示)

git log -n4 只查看前几次提交信息

git log --all 查看所有分支的日志

git log --all --graph 图形化形式查看所有分支的日志

  1. 提交区操作

git commit --amend 对最近一次提交信息进行修改或者将第二次提交替代第一次提交

git rebase -i parentid 修改以前提交的commit信息,将需要修改的信息修改为 r

git rebase -i parentid 修改以前提交的信息,将需要修改的信息修改为 s

git reset --hard commitid 将之前提交的commit都清除,所有文件回到这个commit提交的内容

  1. 暂存区操作

git reset head (filename) 清空暂存区,可以指定文件

git checkout filename 将工作区恢复成最近一次提交内容

git chechout commitID 切换到该次提交(头指针分离)

  1. 远程仓库

git remote -v 显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL

git remote add name url 添加一个新的远程 Git 仓库

git remote rename oldname newname 远程仓库重命名

git remote remove name 删除远程仓库,其相关分支以及配置也会被删除

git fetch remotename branchname 拉取远端分支

git push remotename branch 向远端推送分支

git push <remote> localbranch:refs/for/remotebranch 向远端推送分支(需要进行code review)

git push origin HEAD:refs/for/remotebranch

2. Git分支

使用分支可以把个人工作从开发主线上分离开来,以免影响开发主线。创建分支只是创建了一个可移动的新指针,通过head指针就可以知道当前处于哪个分支上。

img

  1. 分支命令

git branch 分支列表

git branch name 创建分支

git branch -D name 删除分支

git checkout (-b) name 切换分支(创建并切换分支)

git branch --merged 查看已合并的分支

git branch --no-merged 查看未合并的分支

  1. 远程分支

远程分支以 remotename/branch 命名,如 origin/master

git remote show name 查看远程分支信息

git fetch remotename branchname 同步远程分支数据,不写远程仓库默认所有的,不写分支默认远程仓库所有分支

git merge branch 合并冲突

git pull remotename remotebranch:localbranch 从远程仓库拉取数据并合并,省略本地分支则默认当前所在分支

git push remotename localbranch:remotebranch 将数据推送到远程分支上

  1. 跟踪分支

跟踪分支是与远程分支有直接关系的本地分支。

git checkout -b localbranch remotename/branch 创建跟踪分支(起点在remotename/branch上的分支)

git branch -u remotename/branch 设置跟踪分支

git branch -vv 可查看本地分支跟踪的远程分支

  1. 删除远程分支

git push <remote> --delete branch 删除远程分支

  1. 变基

使用 rebase 命令将提交到某一分支上的所有修改都移至另一分支上,这个操作就叫变基。

git rebase branch 以该分支为基底

  1. 缓存

git stash 将当前改动暂存

git stash list 查看暂存列表

git stash pop 弹出第一个暂存

git stash apply 应用第一个暂存,不会从暂存列表中移除

git stash clear 清除暂存列表

  1. 禁止行为

git push -f 强制推送

不要对集成分支进行变基

  1. 实践

git pull origin master:master

git merge --no-ff branchname

git commit --amend

git push origin HEAD:refs/for/master

–no-ff 关闭快进模式,产生一个新的提交

3. GitHub

  1. in:readme 在readme中搜索

版本控制
https://pursuemilk.github.io/2023/07/09/版本控制/
作者
PursueMilk
发布于
2023年7月9日
许可协议