点击上方“方志朋”,选择“设为星标”

回复”666“获取新整理的面试文章

作者 | 凌承一

来源 | bubuko.com/infodetail-2844306.html

本文从 Git 与 SVN 的对比入手,介绍如何通过 Git-SVN 开始使用 Git,并总结平时工作高频率使用到的 Git 常用命令。

一、Git vs SVN

Git 和 SVN 孰优孰好,每个人有不同的体验。

Git是分布式的,SVN是集中式的

这是 Git 和 SVN 最大的区别。若能掌握这个概念,两者区别基本搞懂大半。因为 Git 是分布式的,所以 Git 支持离线工作,在本地可以进行很多操作,包括接下来将要重磅推出的分支功能。而 SVN 必须联网才能正常工作。

Git复杂概念多,SVN简单易上手

所有同时掌握 Git 和 SVN 的开发者都必须承认,Git 的命令实在太多了,日常工作需要掌握add,commit,status,fetch,push,rebase等,若要熟练掌握,还必须掌握rebase和merge的区别,fetch和pull的区别等,除此之外,还有cherry-pick,submodule,stash等功能,仅是这些名词听着都很绕。

在易用性这方面,SVN对于新手来说会更有好一些。但是从另外一方面看,Git 命令多意味着功能多,若我们能掌握大部分 Git 的功能,体会到其中的奥妙,会发现再也回不去 SVN 的时代了。

Git分支廉价,SVN分支昂贵

在版本管理里,分支是很常使用的功能。在发布版本前,需要发布分支,进行大需求开发,需要 feature 分支,大团队还会有开发分支,稳定分支等。在大团队开发过程中,常常存在创建分支,切换分支的求。

Git 分支是指针指向某次提交,而 SVN 分支是拷贝的目录。这个特性使 Git 的分支切换非常迅速,并且创建成本非常低。

而且 Git 有本地分支,SVN 无本地分支。在实际开发过程中,经常会遇到有些代码没写完,但是需紧急处理其他问题,若我们使用 Git,便可以创建本地分支存储没写完的代码,待问题处理完后,再回到本地分支继续完成代码。

二、Git 核心概念

Git 最核心的一个概念就是工作流。

  • 工作区(Workspace)是电脑中实际的目录。

  • 暂存区(Index)类似于缓存区域,临时保存你的改动。

  • 仓库区(Repository),分为本地仓库和远程仓库。

从 SVN 切换到 Git,最难理解并且最不能理解的是暂存区和本地仓库。熟练使用 Git 后,会发现这简直是神设计,由于这两者的存在,使许多工作变得易管理。

通常提交代码分为几步:

  1. git add从工作区提交到暂存区

  2. git commit从暂存区提交到本地仓库

  3. git push或git svn dcommit从本地仓库提交到远程仓库

一般来说,记住以下命令,便可进行日常工作了(图片来源于网络):

三、Git-SVN常用命令

若服务器使用的 SVN,但是本地想要体验 Git 的本地分支,离线操作等功能,可以使用 Git-SVN功能。

常用操作如下(图片来源于网络):

[ Git-SVN ]

# 下载一个 SVN 项目和它的整个代码历史,并初始化为 Git 代码库
$ git svn clone -s [repository]
# 查看当前版本库情况
$ git svn info
# 取回远程仓库所有分支的变化
$ git svn fetch
# 取回远程仓库当前分支的变化,并与本地分支变基合并
$ git svn rebase
# 上传当前分支的本地仓库到远程仓库
$ git svn dcommit
# 拉取新分支,并提交到远程仓库
$ svn copy [remote_branch] [new_remote_branch] -m [message]
# 创建远程分支对应的本地分支
$ git checkout -b [local_branch] [remote_branch]

四、初始化

从本节开始,除特殊说明,以下命令均适用于 Git 与 Git-SVN。# 在当前目录新建一个Git代码库
$ git init
# 下载一个项目和它的整个代码历史 [Git only]
$ git clone [url]

五、配置

# 列举所有配置
$ git config -l
# 为命令配置别名
$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.st status
$ git config --global alias.br branch
# 设置提交代码时的用户信息
$ git config [--global] user.name "[name]"
$ git config [--global] user.email "[email address]"

Git 用户的配置文件位于 ~/.gitconfig

Git 单个仓库的配置文件位于 ~/$PROJECT_PATH/.git/config

六、增删文件

# 添加当前目录的所有文件到暂存区
$ git add .
# 添加指定文件到暂存区
$ git add <file1> <file2> ...
# 添加指定目录到暂存区,包括其子目录
$ git add <dir>
# 删除工作区文件,并且将这次删除放入暂存区
$ git rm [file1] [file2] ...
# 停止追踪指定文件,但该文件会保留在工作区
$ git rm --cached [file]
# 改名文件,并且将这个改名放入暂存区
$ git mv [file-original] [file-renamed]

把文件名 file1 添加到 .gitignore 文件里,Git 会停止跟踪 file1 的状态。

七、分支

# 列出所有本地分支
$ git branch
# 列出所有本地分支和远程分支
$ git branch -a
# 新建一个分支,但依然停留在当前分支
$ git branch [branch-name]
# 新建一个分支,并切换到该分支
$ git checkout -b [new_branch] [remote-branch]
# 切换到指定分支,并更新工作区
$ git checkout [branch-name]
# 合并指定分支到当前分支
$ git merge [branch]
# 选择一个 commit,合并进当前分支
$ git cherry-pick [commit]
# 删除本地分支,-D 参数强制删除分支
$ git branch -d [branch-name]
# 删除远程分支
$ git push [remote] :[remote-branch]

八、提交

# 提交暂存区到仓库区
$ git commit -m [message]
# 提交工作区与暂存区的变化直接到仓库区
$ git commit -a
# 提交时显示所有 diff 信息
$ git commit -v
# 提交暂存区修改到仓库区,合并到上次修改,并修改上次的提交信息
$ git commit --amend -m [message]
# 上传本地指定分支到远程仓库
$ git push [remote] [remote-branch]

九、拉取

# 下载远程仓库的所有变动 (Git only)
$ git fetch [remote]
# 显示所有远程仓库 (Git only)
$ git remote -v
# 显示某个远程仓库的信息 (Git only)
$ git remote show [remote]
# 增加一个新的远程仓库,并命名 (Git only)
$ git remote add [remote-name] [url]
# 取回远程仓库的变化,并与本地分支合并,(Git only), 若使用 Git-SVN,请查看第三节
$ git pull [remote] [branch]
# 取回远程仓库的变化,并与本地分支变基合并,(Git only), 若使用 Git-SVN,请查看第三节
$ git pull --rebase [remote] [branch]

十、撤销

# 恢复暂存区的指定文件到工作区
$ git checkout [file]
# 恢复暂存区当前目录的所有文件到工作区
$ git checkout .
# 恢复工作区到指定 commit
$ git checkout [commit]
# 重置暂存区的指定文件,与上一次 commit 保持一致,但工作区不变
$ git reset [file]
# 重置暂存区与工作区,与上一次 commit 保持一致
$ git reset --hard
# 重置当前分支的指针为指定 commit,同时重置暂存区,但工作区不变
$ git reset [commit]
# 重置当前分支的HEAD为指定 commit,同时重置暂存区和工作区,与指定 commit 一致
$ git reset --hard [commit]
# 新建一个 commit,用于撤销指定 commit
$ git revert [commit]
# 将未提交的变化放在储藏区
$ git stash
# 将储藏区的内容恢复到当前工作区
$ git stash pop

十一、查询

# 查看工作区文件修改状态
$ git status
# 查看工作区文件修改具体内容
$ git diff [file]
# 查看暂存区文件修改内容
$ git diff --cached [file]
# 查看版本库修改记录
$ git log
# 查看某人提交记录
$ git log --author=someone
# 查看某个文件的历史具体修改内容
$ git log -p [file]
# 查看某次提交具体修改内容
$ git show [commit]

实际环境,Git的使用的确比SVN要多一点,毕竟功能要强大一些。

你的工作环境是使用svn  or  git  ? 欢迎分享!

热门内容:SpringBoot内存泄露,排查竟这么难!
面试官给我挖坑:URI中的 “//” 有什么用?
SpringBoot配置文件放在jar外部
高效开发:IntelliJ IDEA天天用,这些Debug技巧你都知道?
MySQL 大表优化方案最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。
明天见(。・ω・。

用好 Git 和 SVN,轻松驾驭版本管理相关推荐

  1. add svn 多个文件_用好Git 和 SVN ,轻松驾驭版本管理

    一.Git vs SVN Git 和 SVN 孰优孰好,每个人有不同的体验. Git是分布式的,SVN是集中式的 这是 Git 和 SVN 最大的区别.若能掌握这个概念,两者区别基本搞懂大半.因为 G ...

  2. Git 常用命令总结,掌握这些,轻松驾驭版本管理

    Git 常用命令总结,掌握这些,轻松驾驭版本管理 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn ...

  3. gitee项目能用SVN拉取吗_用好 Git 和 SVN,轻松驾驭版本管理

    来源 | 凌承一链接 | bubuko.com/infodetail-2844306.html 本文从 Git 与 SVN 的对比入手,介绍如何通过 Git-SVN 开始使用 Git,并总结平时工作高 ...

  4. 谈一谈git和SVN两大版本管理工具。

    Git 和 SVN 的区别? 写在前面: git和SVN都是一个版本管理工具,没有孰优孰劣之分,在这里,只是简单的说一说git和svn的优缺点.选用哪一个看自己公司的实际情况而定. 1) 核心的区别在 ...

  5. git 强制推送_Git 常用命令清单,掌握这些,轻松驾驭版本管理

    工程下载.分支的增删查改 工程下载: clone 远程工程:git clone https://XXXX.git fetch 远程分支到本地某分支:git fetch origin : 分支的增删查改 ...

  6. Git 常用命令清单,掌握这些,轻松驾驭版本管理

    来源:https://0x9.me/x5Z3t 工程下载.分支的增删查改 工程下载: clone 远程工程:git clone https://XXXX.git fetch 远程分支到本地某分支:gi ...

  7. GitHub与Git区别,Git与SVN区别,Git国内镜像下载

    GitHub 又称 GayHub,作为众多开源代码的汇集地,名副其实被誉为全球最大的同性交友社区.我们在这里上传和下载代码,GitHub进行远程托管,拥有代码管理权的人可以对版本和内容进行控制,极大的 ...

  8. git项目比对_Git实战之Git对比SVN

    相信很多测试和开发的小伙伴都用过svn,那么svn作为入门级的版本管理工具应用的企业也是比较多的.那么我们先来介绍一下关于svn的一些特点吧,在给大家回顾一下.说的简单点就是svn需要一台svn服务器 ...

  9. 使用Git管理SVN

    简介 当前,大多数开发中的开源项目以及大量的商业项目都使用 Subversion 来管理源码.作为最流行的开源版本控制系统,Subversion 已经存在了接近十年的时间.它在许多方面与 CVS 十分 ...

最新文章

  1. chrome弱网_请你进行一下弱网模拟
  2. RabbitMQ入门之安装配置与简单实例
  3. Linux基础—screen命令
  4. 阿里开源台柱 Ant Design 源码仓库被删了...
  5. 【解决方案】UserWarning: Possibly corrupt EXIF data.导致读取图片失败
  6. 什么是微服务?为什么你要用微服务?
  7. JavaFX技巧13:学习Modena CSS文件
  8. mysql多大_洞悉MySQL底层架构:游走在缓冲与磁盘之间
  9. 推荐35个优秀的电子商务网站界面 (转)
  10. building tool
  11. 针对低网速的性能优化
  12. 伯克利,斯坦福,宾大联合发表:从观察和交互中学习预测模型
  13. 串行通信技术SERDES
  14. 服务器是用集成网卡好还是独立网卡好
  15. 001-取整函数(ceil、floor、round)
  16. 微星z370安装linux系统,微星主板Z370、Z270、H110、H170设置U盘启动,U盘启动快捷键...
  17. 十年架构师留下最完整的Java学习路线,学完年薪40W
  18. “21 天好习惯”第一期-4
  19. 竖流式沉淀池三角堰计算_竖流式沉淀池设计计算
  20. world quant global alphathon 全球总决赛 第二名经验分享

热门文章

  1. VMware虚拟机安装黑苹果MacOS Mojave系统详细教程
  2. 自动化运维工具----ansible
  3. Mui.ajax请求服务器正确返回json数据格式
  4. iOS项目的本地化处理(多国语言)
  5. 深入了解Mvc路由系统
  6. URAL 1203 Scientific Conference(贪心 || DP)
  7. Xcode 5.0.1安装插件:规范注释生成器VVDocumenter + OSX 10.9.2
  8. 【怎样写代码】实现对象的复用 -- 享元模式(一):问题案例
  9. 使用 Python 开发一个恐龙跑跑小游戏,玩起来
  10. 清华团队让 AI 写诗“更上一层楼”,诗歌图灵测试迷惑近半数玩家