1 Star 0 Fork 1

原嘉辉 / fullstack-tutorial

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Git.md 8.36 KB
一键复制 编辑 原始数据 按行查看 历史
FrankFeekr 提交于 2018-11-25 09:56 . no message

前言

这是一篇入门级使用指南,更多详细的请参考 Git 官网电子书

在这里将列举一些常用命令和场景解决方案,欢迎大家补充学习。

一、Git 简介

什么是版本控制系统

为什么需要版本 控制

在软件开发过程,每天都会产生新的代码,代码合并的过程中可能会出现如下问题:

  • 代码被覆盖或丢失
  • 代码写的不理想希望还原之前的版本
  • 希望知道与之前版本的差别
  • 是谁修改了代码以及为什么修改
  • 发版时希望分成不同的版本(测试版、发行版等)

因此,我们希望有一种机制,能够帮助我们:

  • 可以随时回滚到之前的版本
  • 协同开发时不会覆盖别人的代码
  • 留下修改记录,以便随时查看
  • 发版时可以方便的管理不同的版本

什么是版本控制系统

一个标准的版本控制系统 Version Control System (VCS),通常需要有以下功能:

  • 能够创建 Repository (仓库),用来保存代码
  • 协同开发时方便将代码分发给团队成员
  • 记录每次修改代码的内容、时间、原因等信息
  • 能够创建 Branch (分支),可以根据不同的场景进行开发
  • 能够创建 Tag (标签),建立项目里程碑

版本控制系统的发展史

版本控制系统发展至今有几种不同的模式:

Local VCS

本地使用 复制/粘贴 的方式进行管理,缺点是无法协同开发

Centralized VCS (Lock,悲观锁)

中央集中式版本控制系统团队共用仓库,当某人需要编辑文件时,进行锁定,以免其他人同时编辑时造成冲突。缺点是虽然避免了冲突,但不是很方便。其他人需要排队才能编辑文件,如果有人编辑了很久或是忘记解锁就会造成其他人长时间等待的情况。

Centralized VCS (Merge,乐观锁)

中央集中式版本控制系统团队共用仓库,不采用悲观锁方式来避免冲突,而是事后发现如果别人也修改相同文件(冲突),再进行手动修改解决。有很多 VCS 属于这种类型,如:CVS,Subversion,Perforce 等

中央集中式版本控制系统的共同问题是,做任何操作都需要和服务器同步,如果服务器宕机则会造成无法继续工作的窘迫。

Distributed VCS

分布式版本控制系统,本地也拥有完整的代码仓库,就不会出现上述集中式管理的问题,即使没有网络,依然可以 commit 和看 log,也无需担心服务器同步问题。如:Git,Mercurial,Bazaar 等就属于分布式版本控制系统。缺点是功能比较复杂,上手需要一定的学习时间。

什么是 Git

  • Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
  • Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
  • Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

如何安装 Git

二、Git 常用命令速查

一图胜千言

img

推荐一个不错的可视化工具:Git Cheat Sheet

配置

设置提交者姓名

$ git config --global user.name "John Doe"

设置提交者邮箱

$ git config --global user.email johndoe@example.com

查看配置列表

$ git config --list

基础操作

在指定目录创建仓库,如果没有指定目录名将在当前目录创建仓库

$ git init [目录名]

# 当前文件夹初始化
$ git init .

# 指定目录
$ git init frank

从指定地址克隆仓库,若不指定目录名将默认创建与远程同名目录

$ git clone <远程仓库地址> [目录名]

# 不想创建目录,目录名为 . ,直接加在内容到当前目录下
$ git clone https://github.com/frank-lam/2019_campus_apply.git .

将文件或目录中已修改的代码添加追暂存区

$ git add <目录名|文件名>

提交暂存区内容

$ git commit -m "<注释>"

查看仓库状态

$ git status

比对 diff

比对当前内容和暂存区内容

$ git diff

比对当前内容和最近一次提交

$ git diff HEAD

比对当前内容和倒数第二次提交

$ git diff HEAD^

比对最近两次提交

$ git diff HEAD^ HEAD

历史 log

查看提交历史

$ git log --oneline

打印为单行log

$ git log --oneline

打印所有记录(忽略HEAD的位置)

$ git log --all

打印示意图(忽略HEAD的位置)

$ git log --graph

分支 branch

查看所有分支

$ git branch

有分支:创建分支,无分支:列出所有分支

$ git branch [分支]

切换至分支

$ git checkout <分支>

创建并切换至分支分支

$ git checkout -b <分支>

将分支与当前分支合并

$ git merge <分支>

远程

拉取远程仓库

$ git pull

推送至远程仓库

$ git push <远程仓库> <分支>

新增远程仓库 origin

$ git remote add origin https://xxx.git

修改远程仓库 origin

$ git remote set-url origin https://xxx.git

三、Git 常用场景

1. 删除本地文件后,想从远程仓库中重新 Pull 最新版文件

Git提示:up-to-date,但未得到删除的文件

原因:当前本地库处于另一个分支中,需将本分支发 Head 重置至 master

$ git checkout master 
$ git reset --hard

git 强行 pull 并覆盖本地文件

$ git fetch --all  
$ git reset --hard origin/master 
$ git pull

2. 储藏与清理

应用场景:

  1. 当正在 dev 分支上开发某个项目,这时项目中出现一个 bug,需要紧急修复,但是正在开发的内容只是完成一半,还不想提交,这时可以用 git stash 命令将修改的内容保存至堆栈区,然后顺利切换到 hotfix 分支进行 bug 修复,修复完成后,再次切回到 dev 分支,从堆栈中恢复刚刚保存的内容。
  2. 由于疏忽,本应该在 dev 分支开发的内容,却在 master 上进行了开发,需要重新切回到 dev 分支上进行开发,可以用 git stash 将内容保存至堆栈中,切回到 dev 分支后,再次恢复内容即可。

总的来说,git stash 命令的作用就是将目前还不想提交的但是已经修改的内容进行保存至堆栈中,后续可以在某个分支上恢复出堆栈中的内容。这也就是说,stash 中的内容不仅仅可以恢复到原先开发的分支,也可以恢复到其他任意指定的分支上。git stash 作用的范围包括工作区和暂存区中的内容,也就是说没有提交的内容都会保存至堆栈中。

1
https://gitee.com/yuanjiahui/fullstack-tutorial.git
git@gitee.com:yuanjiahui/fullstack-tutorial.git
yuanjiahui
fullstack-tutorial
fullstack-tutorial
master

搜索帮助