Vcs-Git 版本控制速览

原文链接:Vcs-Git

本文总结版本控制工具git在日常开发工作常用到的一些命令,以及一些常用的场景应用,比如分支管理,远程管理,合并冲突处理等。后续持续更新中。

常用命令

下面的图片很清晰的说明来一些命令和各个区域的关系

git-command.png
常用
git remote add origin git@github.com:yeszao/dofiler.git   # 配置远程git版本库
git pull origin master                                    # 下载代码及快速合并 
git push origin master                                    # 上传代码及快速合并
git fetch origin                                          # 从远程库获取代码

git branch                                                # 显示所有分支
git checkout master                                       # 切换到master分支
git checkout -b dev                                       # 创建并切换到dev分支
git commit -m "first version"                             # 提交

git status                                                # 查看状态
git log                                                   # 查看提交历史

git config --global core.editor vim                       # 设置默认编辑器为vim(git默认用nano)
git config core.ignorecase false                          # 设置大小写敏感
git config --global user.name "YOUR NAME"                 # 设置用户名
git config --global user.email "YOUR EMAIL ADDRESS"       # 设置邮箱
创建版本库
git clone <url>                 # 克隆远程版本库
git init                        # 初始化本地版本库
修改和提交
git status                      # 查看状态
git diff                        # 查看变更内容
git add .                       # 跟踪所有改动过的文件
git add <file>                  # 跟踪指定的文件
git mv <old> <new>              # 文件改名
git rm <file>                   # 删除文件
git rm --cached <file>          # 停止跟踪文件但不删除
git commit -m “commit message”  # 提交所有更新过的文件
git commit --amend              # 修改最后一次提交
查看提交历史
git log                         # 查看提交历史
git log -p <file>               # 查看指定文件的提交历史
git blame <file>                # 以列表方式查看指定文件的提交历史
撤消
git reset --hard HEAD           # 撤消工作目录中所有未提交文件的修改内容
git reset --hard <version>      # 撤销到某个特定版本
git checkout HEAD <file>        # 撤消指定的未提交文件的修改内容
git checkout -- <file>          # 同上一个命令
git revert <commit>             # 撤消指定的提交
分支与标签
git branch                      # 显示所有本地分支
git checkout <branch/tag>       # 切换到指定分支或标签
git branch <new-branch>         # 创建新分支
git branch -d <branch>          # 删除本地分支
git tag                         # 列出所有本地标签
git tag <tagname>               # 基于最新提交创建标签
git tag -a "v1.0" -m "一些说明"  # -a指定标签名称,-m指定标签说明
git tag -d <tagname>            # 删除标签

git checkout dev                # 合并特定的commit到dev分支上
git cherry-pick 62ecb3
合并与衍合
git merge <branch>              # 合并指定分支到当前分支
git merge --abort               # 取消当前合并,重建合并前状态
git merge dev -Xtheirs          # 以合并dev分支到当前分支,有冲突则以dev分支为准
git rebase <branch>             # 衍合指定分支到当前分支
远程操作
git remote -v                   # 查看远程版本库信息
git remote show <remote>        # 查看指定远程版本库信息
git remote add <remote> <url>   # 添加远程版本库
git remote remove <remote>      # 删除指定的远程版本库
git fetch <remote>              # 从远程库获取代码
git pull <remote> <branch>      # 下载代码及快速合并
git push <remote> <branch>      # 上传代码及快速合并
git push <remote> :<branch/tag-name> # 删除远程分支或标签
git push --tags                 # 上传所有标签

Git 分支管理

Git Flow流程管理,参见如下图

git-flow.png
主分支master
开发分支develop
git checkout -b develop master
# 切换到Master分支
git checkout master
# 对Develop分支进行合并,使用--no-ff参数后,会执行正常合并,
# 在Master分支上生成一个新节点。
# 为了保证版本演进的清晰,我们希望采用这种做法。
git merge --no-ff develop
临时分支
  • 功能(feature)分支,为了开发某种特定功能,从Develop分支上面分出来的。开发完成后,要再并入Develop。
# 创建一个功能分支
git checkout -b feature-x develop
# 开发完成后,将功能分支合并到develop分支:
git checkout develop
git merge --no-ff feature-x
删除feature分支
git branch -d feature-x
  • 预发布(release)分支,发布正式版本之前(即合并到Master分支之前),我们可能需要有一个预发布的版本进行测试。预发布分支是从Develop分支上面分出来的,预发布结束以后,必须合并进Develop和Master分支。它的命名,可以采用release-*的形式。
# 创建一个预发布分支
git checkout -b release-1.2 develop
# 确认没有问题后,合并到master分支:
git checkout master
git merge --no-ff release-1.2
# 对合并生成的新节点,做一个标签
git tag -a 1.2
# 再合并到develop分支
git checkout develop
git merge --no-ff release-1.2
# 最后,删除预发布分支:
git branch -d release-1.2
  • 修补bug(fixbug)分支。软件正式发布以后,难免会出现bug。这时就需要创建一个分支,进行bug修补。修补bug分支是从Master分支上面分出来的。修补结束以后,再合并进Master和Develop分支。它的命名,可以采用fixbug-*的形式。
# 创建一个修补bug分支
git checkout -b fixbug-0.1 master
# 修补结束后,合并到master分支:
git checkout master
git merge --no-ff fixbug-0.1
git tag -a 0.1.1
# 再合并到develop分支
git checkout develop
git merge --no-ff fixbug-0.1
# 最后,删除"修补bug分支":
git branch -d fixbug-0.1

Git 远程管理

Git服务器迁移另外一台GIT服务器

前提条件:

  • first.git已存在

  • second.git 待同步仓储 第一次需初始化.

    可以在gitlab,github网页初始化,空项目,不要初始化README.md等

    可以以命令行方式初始化

git init --bare

方式一:

git clone --bare https://first.git First-Server 
cd First-Server 
git add tencent https://second.git
git push tencent --all

方式二:

git clone --mirror https://first.git First-Server 
cd First-Server
git push --mirror https://second.git
SVN服务器迁移到GIT服务器

svn代码迁移到git服务器,主要用到git-svn命令

# 创建user.txt 提交记录映射表
svn log --xml | grep author | sort -u | perl -pe 's/.*>(.*?)<.*/$1 = /'
# 拉取svn代码
git svn clone http://svn_address --authors-file=users.txt --no-metadata -s my_project
# 如果提交记录太多,可选取最近提交记录,以下是取最近5000次
git svn clone -r5000:HEAD svn_address --authors-file=users.txt --no-metadata -s my_project
# 清理工作
cp -Rf .git/refs/remotes/origin/tags/* .git/refs/tags/
rm -Rf .git/refs/remotes
# 添加git服务器地址,并上传
git remote add origin git@my-git-server:myrepository.git
git push origin --all
绑定多个服务器

方式一:git remote add

git remote -v
git remote add tecent https://xxx.git
git push origin master:master
git push tecent master:master

方式二 git remote set-url

git remote set-url --add https://xxx.git
cat .git/config
git push origin --all

合并冲突处理

git merge 分支名
//有冲突的话,通过IDE解决冲突,
git status //查看状态然后再执行
git add 
git commit

服务器选择

git服务器选择,如果是小团队的话,建议直接服务器安装git后,命令行直接创建,也可以选择gitlab搭建,当然如果不介意公网,想更可视化查看代码,也可以考虑一些云服务器,目前国内的码云,阿里云,腾讯云,以及国外的github等都提供免费的个人代码云仓储。

参考

推荐阅读

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

推荐阅读更多精彩内容