产品前端架构——版本管理 [网易前端笔记]

初始化开发环境


安装git后需要做的第一件事情

git config --global user.name 'exmaple: Github Account'// 配置用户名
git config --global user.email 'example: GitHub Email Address' //配置用户email

用于某个项目的特殊配置, 将上面的--global参数替换为--local
要查看当前的配置信息,输入git config --list or git config --global --list

使用github

  1. 生成ssh key
# Step 1. 
在终端中输入 ssh-keygen -t rsa -C "YOUR EMAIL"
一直按回车
# Step 2.
cd ~/.ssh
cat id_rsa.pub
拷贝其中内容
  • 将上一步得到的内容设置到github中

具体的查看Github上的内容, 此处只做记录
GitHub: guide to generating SSH keys

使用别名设置自定义log

命令格式:git config alias.shorename <fullcommand>

//Example. 配置格式化的log
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

更加简化的log: git log --online

git 基本操作(常用命令)


查看git帮助文档

git  help <command>
git <command> -h
git <command>  --help

git config 配置git

  1. 用户配置
git config --global user.name "Demo User"
git config --global user.email "example@test.com"

这些配置会在提交中被展现


用户配置信息在提交记录中的展现

配置级别:

  • --local 【默认, 高优先级】:只影响本仓库.git/config
  • --global 【中优先级】:影响所有当前用户的git仓库~/.gitconfig
  • --system 【低优先级】:影响到全系统的git仓库,无论是哪一个用户/etc/gitconfig

git init 初始化仓库

git init [path]
git init [path] --bare

初始化后将会在被初始化的目录下出现一个.git目录, 结构如下:

workdir
|__.git
   |——HEAD
   |——branches
   |——config
   |——description
   |——hooks
   |——info
   |——objects
   |__refs

git status

# git status 主要用于在下面3对关系之间找出他们的关系变化
- 未跟踪    <——> 跟踪
- 工作目录  <——> 暂存区
- 暂存区    <——> 最新提交

对文件状态的追踪

内容状态: 工作区,暂存区,提交区
文件跟踪状态:已跟踪,未跟踪


内容状态:工作目录,暂存区,提交区
  1. touch newFile, 将在工作目录创建一个newFile的文件,此时文件处于未跟踪状态
  • git add newFile or git add .,文件被添加到暂存区,同时文件被跟踪

.gitignore 忽略文件

  • 在添加时忽略匹配文件
  • 仅作用于未追踪文件
    相当于在使用git add命令时,将.gitignore文件中所列的文件类型都进行了删除
    .gitignore文件范列

.gitignore文件中用"#"来添加注释
常见的.gitignore配置,可以参考:github/gitignore

git-rm 从暂存区删除文件

git rm --cached // 仅从暂存区删除

git diff 显示不同版本之间的差异

  • 显示工作目录与暂存区之间的差异, 命令:git diff
  • 暂存区与某次提交差异, 默认为HEAD,命令:git diff --cached [<reference>]
  • 工作目录与某次提交的差异,命令:git diff <reference>
  • 两次提交之间的差异, 命令: git diff <commitId1 commitId2>

撤销修改

  1. 将文件内容从暂存区复制到工作目录,命令: git checkout --<file>

此操作会丢弃你的修改

  • 将文件内容从上次提交复制到暂存区,命令: git reset HEAD <file>
工作目录,暂存区和提交区

git分支操作


分支的增删查改 git branch

创建分支
git branch <branchName>
删除分支
git branch -d <branchName>
查看所有分支信息
git branch -v

所有的分支信息都会存放在下面的文件中
cat .git/refs/heads/master

git checkout 通过移动HEAD检出版本,可用于分支切换

git checkout <branchName> // 切换分支
git checkout -b <branchName> // 新建并切换到一个分支
git checkout -   // 恢复到上一个分支
git checkout <commit> // 切换到某次提交, head处于分离状态,此时避免做write操作

git reset 将当前分支回退到历史某个版本

git reset --mixed <commit> (默认) // 会将当前内容复制到暂存区
git reset --soft <commit> // 会暂存区和工作目录的状态,不会有任何变化
git reset --hard <commit> // 会将当前内容复制到暂存区和工作目录

区别主要在于: 内容是否会恢复到工作目录或者暂存区

使用捷径

  • A^ : A上的父提交
  • A~n: 在A之前的第n次提交

reset 与 checkout的区别(commit操作&file操作)

reset & checkout

命令 移动 范例(HEAD/branch) 说明
git reset 【commit】 git reset HEAD^ --soft 是/是 完全回退到某提交
git reset 【file】 git reset README.me 否/否 恢复暂存区到某提交状态
git checkout 【commit】 git checkout master 是/否 移动当前指针HEAD到某提交
git checkout 【file】 git checkout --README.md git checkout HEAD --xx.log 否/否 恢复工作目录到某状态

git stash

保存目前的工作目录和暂存区状态并返回到干净的工作空间

使用场景: 其他分支有紧急任务, 但当前分支还存在未完成的工作(不能提交也不能放弃修改的情况下)

  1. 保存当前工作目录和暂存区的文件
git stash save 'push to stash area'
  • 查看暂存区内容
git stash list
// stash@{0}: On master: push to stash area
  • 取回暂存区内容到工作目录
git stash apply stash@{0}
  • 丢弃暂存区对应的stash
git stash drop stash@{0}
  • 取回暂存区栈顶一条内容到工作目录并丢弃暂存区栈顶内容
git stash pop stash@{0}
// stash pop = stash apply + stash drop

分支合并 git merge

  1. 解决merge冲突
  • 不要使用fast-forward
    穿入参数--no-ff
eg: git merge next --no-ff
  • git rebase
    修剪提交历史基线,俗称“变基”
eg.  git rebase master // 将会进行分支重演

如果只需要从某次提交修剪可使用以下命令:

git rebase --onto master commit


## git tag 对某个提交设置一个不变的别名

1. 为某次commit设置别名(tag)

git tag v1.0 commit
or
git tag -a 'v1.0' -m 'commit msg'
git push origin --tags


# git 远程操作

git 支持本地协议, 所以我们可以初始化一个本地的远程服务器

git init ~/git-server --bare

> bare 参数的意思是将当前仓库初始化为一个裸仓库,裸仓库没有工作目录
> 其文件结构为:
git-server
  |— HEAD
|—branches
|— config
|— description
|— hooks
|— info
|— objects
|— refs

## git push 用于提交本地历史到远程

## git remote 远程仓库的相关配置
1. 配置远程映射

git remote add origin ~/git-server // 添加远程仓库别名(origin 就是远程仓库git-server的别名,信息会放在.git/config文件下)
git remote -v // 查看远程仓库配置


## push 冲突
> 其他用户先于你push时, 会产生冲突

1. 使用git fetch+merge来解决这一问题

step 1

git fetch origin master

step 2

git merge origin/master

step 3

将这次提交推送到服务器

* 1中的3个步骤也可以使用
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容