学习资料:

1,git config

1,用户名和邮件

配置用户名和邮件:

# 添加配置
git config --global user.name 'Your name'
git config --global user.email 'Your email'

# 查看配置
git config --list --global

2,git 别名

git config --global alias.st status
git config --global alias.ci commit 
git config --global alias.co checkout
git config --global alias.br branch

git config --global 的配置都会放在 ~/.gitconfig 文件中,如下:

[alias]
	co = checkout
	br = branch
	ci = commit
	st = status
	
[user]
	email = myemail@qq.com
	name = myname

3,git ssh 免密登录

首先,查看 ~/.ssh 目录中是否有了公钥和私钥:

> ls ~/.ssh
————————————————————————————
    id_rsa		# 私钥
    id_ras.pub  # 公钥

如果没有则生成 ssh 文件,如果已有则忽略生成 ssh 步骤:

> ssh-keygen -t rsa -b 2048 	# 然后一路回车即可

把生成的公钥 id_ras.pub 中的内容粘贴到远程 git 管理平台中。

账户 > Your Profile/Settings > Edit Profile > SSH Keys > New SSH Key

2,git init & clone

创建 git 仓库有两种方式:

  • 用 git init 初始化一个目录
  • 从远程仓库克隆一个 git 项目
# 在某个目录下执行,将该目录初始化为一个 git 项目
git init

# 克隆远程仓库
git clone <url>

3,git add

将指定内容放入暂存区

git add <file>
git add .

撤销:

git reset HEAD <file>	# 取消对 <file> 的暂存,就是将其状态改为未暂存状态,相当于没有执行 git add <file>
	                # 这样,在执行 git commit 时,就不会包含该文件
	
git checkout -- <file>  # <file> 文件已发生改变,但还没有被放入暂存区(可使用 git add <file> 将其放入暂存区)
			# git checkout -- <file> 的含义是将目前对 <file> 的修改还原/撤销到未修改之前

4,git commit

git commit 			# 将暂存区内容,提交到本地仓库
git commit -a			# 将暂存和未暂存的内容,一并提交
git commit -m 			# 添加提交信息

# 使用一次新的 commit,替代上一次提交
# 如果代码没有变化,则修改最近一次的提交信息
git commit --amend	-m [message]

回滚:

git reset --hard <commit_id>    # 将 git 版本回退到 commit_id 版本
				# 要慎用,它会将 commit_id 版本之后提交的所有提交记录全部删除,一点信息不留

git revert		        # 将指定的提交(普通提交 / merge提交)撤销掉,比 reset 更安全

git commit message 规范:

  • feat:新功能、新特性
  • fix:修补 bug
  • docs:文档修改
  • style:代码格式修改(不影响代码运行的变动)
  • refactor:代码重构(即不是新增功能,也不是修改bug)
  • perf:优化相关,比如提升性能、体验
  • test:增加测试
  • chore:构建过程或辅助工具的变动
  • revert:回滚代码

5,git status

git status			# 查看当前状态
git status -s			# 用简洁的方式,查看当前状态

#########################
M README			# 已被修改的文件,还没有被加入暂存区
MM Rakefile			# 修改过的文件,已被加入暂存区,然后又被修改了
A  lib/git.rb			# 新被加入到暂存区的文件
?? LICENSE.txt			# 未被跟踪的文件	

6,git diff

# 查看未暂存的修改 --- 当前做的哪些更新尚未暂存?
git diff

# 只查看一个文件的不同
git diff <file>
	
# 查看已暂存的修改 --- 有哪些更新已暂存并准备好下次提交?
git diff --staged/cached	# 这条命令将比对已暂存文件与最后一次提交的文件差异

7,git rm & mv

git rm <file>			# 将 <file> 移出版本管理,并从磁盘删除本地文件
git rm --cached <file>	        # 将 <file> 移出版本管理,但不删除本地文件 

git mv <from> <to>		# 文件重命名

9,git log

git log 			# 按时间先后顺序列出所有的提交,最近的更新排在最上面
git log <file>			# 只查看一个文件的提交日志
git log -p / --patch -n         # 显示每次提交所引入的差异,n 表示只显示最近的 n 次
git log --stat			# 查看每次提交的简略统计信息
	
# 使用不同于默认格式的方式展示提交历史
git log --pretty=oneline	# 会将每个提交放在一行显示,在浏览大量的提交时非常有用
                 short
                 full
                 fuller
git log --pretty=format		# 定制化输出
	
# 当 oneline 或 format 与 --graph 结合使用时,可显示分支的合并历史,比如:
git log --pretty=format:"%h %s" --graph [--all]	# --all 表示所有分支

10,git remote

# 查看远程仓库
git remote -v

# 添加远程仓库
git remote add <shortname> <url>	# 添加一个新的远程 Git 仓库,同时指定一个方便使用的简写
git remote rm  <shortname>		# 删除与远程仓库的联系

# 拉取远程仓库
git fetch <shortname> <branch>		# 将远程的<branch>分支的最新内容拉到本地(并不进行合并操作)
git fetch <shortname>                   # 将远程的所有分支的最新内容拉到本地

11,git pull & push

git pull origin <branch>    # 从远程拉取 <branch>,并将其合并到本地的当前所在分支
git push origin <branch>    # 将本地分支 <branch> 推送到远程

12,git branch & checkout

git branch              # 查看所有本地分支
git branch -r           # 查看所有远程分支
git branch -a           # 查看所有本地分支和远程分支

git branch      <new_branch>    # 从当前分支创建一个新分支
git checkout    <branch>        # 切换分支
git checkout -b <new_branch>    # 从当前分支创建分支,并切换到新分支

git checkout    <branch> origin/<branch>	# 将远程的 <branch> 分支迁到本地
git checkout -b <branch> origin/<branch>	# 将远程的 <branch> 分支迁到本地,并切换到新分支

git branch   -d <branch>        # 删除本地分支

git merge       <branch>        # 将 <branch> 合并到当前分支

13,git stash

这样一个场景:

  1. 你正在当前本地分支(my_branch)上做开发
  2. 突然来了一个紧急任务,你需要去处理,那就要切到一个新的分支上去处理
  3. 如果当前工作区有还未提交的文件,这时候是无法切换到新的分支的
  4. 此时你有两种方式:
    1. 第一种:将当前工作区内容提交后,切换到新分支去处理问题
    2. 第二种:将当前工作区的内容暂存,切换到新分支去处理问题
  5. 在新分支上处理完问题之后,切换到之前分支(my_branch)继续开发

第 4 步的第一种方式无须讲解,你就会处理。来看下第 4 步的第二种方式如何处理?

这时候需要用到 git stash 命令:

# 执行 stash 命令
# 该命令会将你当前工作区的内容暂存起来(暂存到一个栈中)
# 以让你你能切换到别的分支去处理问题
git stash

# 查看 stash 中的信息
git stash list

# 当你切换到别的分支,处理完紧急任务后,你又回到了之前的分支
# 此时想恢复 stash 中的内容,使用下面命令,然后就可以在之前的基础上继续开发了
git stash pop

14,git 禁令

在团队合作中以下命令最好禁止使用:

# 当向远程 push 时,有时候会因为自己的版本比较落后(不是 fast-forwards),而 push 失败
# 如果用 push -f 则会强制将自己的版本 push 到远端
# 这样的话就会将远程比较新的更新给覆盖掉
# 所以 push -f 最好禁止使用
git push -f

15,git 工作流

1,主干开发

在这里插入图片描述

2,github flow

在这里插入图片描述

2,git flow

在这里插入图片描述