36

一、安装 Git

二、设置 Git

生成密钥

  • 查看是否已经有了ssh密钥:cd ~/.ssh
  • 如果没有密钥则不会有此文件夹,有则备份删除。
  • ssh-keygen -t rsa -C "xxx@xxx.com"

上传密钥

  • 以github为例,依次点击Setting->SSH and GPB keys->New SSH Key,复制粘贴生成的.pub文件中的秘钥
  • 然后就可以用ssh协议,拉取推送代码了

设置全局基础配置

  • git config --global user.name "xxx" // 请换成你自己的名字
  • git config --global user.email "xxx@xx.com" // 请换成你自己的邮箱
  • git config --global push.default simple // 要求 Git 版本 1.9.5 以上
  • git config --global core.autocrlf false // 让Git不要管Windows/Unix换行符转换的事
  • git config --global core.ignorecase false // windows设置大小写敏感

三、基本工作流程

先附上 Git备忘清单
记着先pull再push,冲突都在本地解决
最后点赞收藏一条龙,硬核植入,哈哈

开始一个工作区

  • init 创建一个空的 Git 仓库或重新初始化一个已存在的仓库
  • clone 使用 SSH(推荐) 或 HTTP 协议,克隆仓库到一个新目录(推荐)
  • git config --global credential.helper store // 记住git帐号密码(http时避免每次提交都要输入)

在当前变更上工作

  • add 添加文件内容至索引
  • mv 移动或重命名一个文件、目录或符号链接
  • restore 恢复工作区文件
  • rm 从工作区和索引中删除文件

检查历史和状态

  • bisect 通过二分查找定位引入 bug 的提交
  • diff 显示提交之间、提交和工作区之间等的差异
  • grep 输出和模式匹配的行
  • log 显示提交日志
  • show 显示各种类型的对象
  • status 显示工作区状态

扩展、标记和调校您的历史记录

  • branch 列出、创建或删除分支
  • commit 记录变更到仓库
  • merge 合并两个或更多开发历史
  • rebase 在另一个分支上重新应用提交
  • reset 重置当前 HEAD 到指定状态
  • switch 切换分支
  • tag 创建、列出、删除或校验一个 GPG 签名的标签对象

协同

  • fetch 从另外一个仓库下载对象和引用
  • pull 获取并整合另外的仓库或一个本地分支
  • push 更新远程引用和相关的对象

四、Git 工具

桌面工具

Git 官方的图形化界面

  • Git GUI (优势:commit 前代码改动的浏览和挑选)
  1. 命令行敲 git gui
  2. Windows Explorer,适当目录下,右键菜单,Git GUI Here
  • Gitk (优势:显示版本树、历史信息)
  1. 命令行敲 gitk --all &
  2. Git GUI -> 菜单 -> 版本库 -> 图示所有分支的历史

其他备选

  • TortoiseGit (Windows)
  • SourceTree (OS X 和 Windows)

Git flow工具

安装

OS X
brew install git-flow

Linux
apt-get install git-flow

Windows
wget -q -O - --no-check-certificate https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh | bash

五、Git flow工作流

约定

flow.png

使用

  • 初始化: git flow init
  • 开始新Feature: git flow feature start MYFEATURE
  • Publish一个Feature(也就是push到远程): git flow feature publish MYFEATURE
  • 获取Publish的Feature: git flow feature pull origin MYFEATURE
  • 完成一个Feature: git flow feature finish MYFEATURE
  • 开始一个Release: git flow release start RELEASE [BASE]
  • Publish一个Release: git flow release publish RELEASE
  • 发布Release: git flow release finish RELEASE
  • 别忘了git push --tags
  • 开始一个Hotfix: git flow hotfix start VERSION [BASENAME]
  • 发布一个Hotfix: git flow hotfix finish VERSION

六、常见问题

1、Git stash暂存修改

当我们在开发项目的时候,突然来一个变更需要修改,我们除了将当前项目提交(commit)后切换(checkout) 到其他分支外,我们还可以先将当前的修改暂存(stash)起来,然后再切换(checkout)到其他分支,而不需要提交(commit),这样就可以减少一个 commit (虽然可以使用 git commit --amend 来修改最后一次提交 )

暂存修改

  • git stash 或 git stash save "注释" 来暂存修改,已经被 git 跟踪,只是修改了代码(而不是新增)文件
  • 如果有新添加的文件,那么就需要添加 -a 参数(如,git stash -a 或 git stash save -a "注释"),或先 git add . 然后再使用 git stash 或 git stash save "注释" 来暂存修改

取出修改

  • git stash pop 取出最近的一个暂存,并从 stash list 中删除该暂存记录
  • git stash apply stash@{id} 取出某个暂存记录,但不会删除记录,stash@{id}里面的id默认从0开始,最近的暂存为0

暂存列表

  • git stash list 查看 stash 列表
  • git stash drop stash@{id} 删除某一个修改暂存
  • git stash clear 清空所有的修改暂存

2、查看 Git日志

git log

  • 显示所有提交过的版本信息
  • 加上参数 --pretty=oneline,过滤显示版本号和提交时的备注信息

git reflog

  • 查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)

自由穿梭 Git版本

  • git reset --hard HEAD~1 退回到上一个版本
  • 通过 git reflog 找到被删除的commitid
  • git reset --hard commitid 就可以回到指定版本

3、git cherry-pick挑拣提交

获取某一个分支的单笔提交,并作为一个新的提交引入到你当前分支上。当我们需要在本地合入其他分支的提交时,如果我们不想对整个分支进行合并,而是只想将某一次提交合入到本地当前分支上,那么就可以使用git cherry-pick

  • 1、首先,切换到develop分支,敲 git log 命令,查找需要合并的commit记录,比如commitID:7fcb3defff;
  • 2、然后,切换到master分支,使用 git cherry-pick 7fcb3defff  命令,就把该条commit记录合并到了master分支,这只是在本地合并到了master分支;
  • 3、最后,git push 提交到master远程,至此,就把develop分支的这条commit所涉及的更改合并到了master分支。

常用options:

  • --continue 继续当前的chery-pick序列
  • --quit 退出当前的chery-pick序列
  • --abort 取消当前的chery-pick序列,恢复当前分支
  • -n, --no-commit 不自动提交
  • -e, --edit 编辑提交信息

4、tag 和 branch 的区别

  • tag 对应某次 commit, 是一个点,是不可移动的。
  • branch 对应一系列 commit,是很多点连成的一根线,有一个HEAD 指针,是可以依靠 HEAD 指针移动的。
  • 创建 tag 是基于本地分支的 commit,而且与分支的推送是两回事,就是说分支已经推送到远程了,但是你的 tag 并没有,如果把 tag 推送到远程分支上,需要另外执行 tag 的推送命令。

5、如何切换链接git服务器的方式是ssh还是http

git remote set-url origin <要修改的url>

系统学习

《 Pro Git 》
《 Git Magic 》
《 GitHub秘籍 》

周振超
1.1k 声望235 粉丝

重新出发