Redridge Mountains

Git 常用操作

Git 是一个免费的开源分布式版本控制系统,旨在快速高效地处理从小到大的项目。

安装 Git

在 macOS 上推荐使用 Homebrew 安装 Git。

$ brew install git

设置密钥

权限校验有两种方式:密码和密钥。推荐使用密钥校验。

备注:如果已经有私钥了,可以从私钥生成公钥
ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub

生成秘钥:

$ ssh-keygen -t rsa -b 4096 -C "your.name@gmail.com"

复制生成的公钥,加入到 GitHub 上:Settings > Access > SSH and GPG keys

$ clip < ~/.ssh/id_rsa.pub          # 在 Windows 上复制到剪切板
$ clipcopy ~/.ssh/id_rsa.pub        # zsh

这样,访问 Git 远程仓库时,不需要每次都输入密码了。

设置身份信息

在本地电脑上,设置提交人的身份信息

$ git config --global user.name "Your Name"
$ git config --global user.email "your.name@gmail.com"

协同开发

团队公共仓库需要用到两种分支:

举个例子,假设我们有个项目,团队公共仓库叫 nighon,我的私有仓库叫 john。 首先从公共仓库(nighon)Fork 到自己的仓库(john)下面 nighon/master => john/master

然后拉取仓库到本地电脑

$ git pull git@github.com:john/myapp.git

接着设置远程的 origin 仓库地址

$ git remote set-url origin git@github.com:john/myapp.git

再从公共分支合并到自己的主分支,同样要设置远程的 upstream 仓库地址

$ git remote add upstream git@github.com:nighon/myapp.git

最后,查看一下设置结果是否正确 git remote -v

开发过程中,需要拉取并合并 nighon/master => john/master(本地)

$ git fetch upstream
$ git checkout master
$ git merge upstream/master

每次需要添加功能时,通常会新建一个分支。从 master 新建分支

$ git checkout -b my-awesome-feature master

# 或者是为修复问题而新建分支 (fix issue)
$ git checkout -b fix-something-wrong master

常用指令 (Cheat Sheet)

HEAD~ 为示范 commit id
README.md 为示范文件名

$ git checkout HEAD~ -- README.md                     # 恢复文件
$ git clean -fd                                       # 清除未包含的文件
$ git push origin +HEAD~:master                       # 强制推送(覆盖)远程分支
$ git log -p -- README.md                             # 列出单个文件历史改动记录
$ git log README.md                                   # 这是查看文件提交历史记录的最基本方法。
$ git blame README.md                                 # 这将列出所有提交已对指定文件进行的操作,以及每次提交的作者以及提交的日期和时间。
$ git diff HEAD~                                      # 列出改动
$ git diff-tree --no-commit-id --name-only -r HEAD~   # 列出改动的文件
$ git branch -d my-awesome-feature                    # 删除本地分支
$ git -C ../nighon.github.io status                   # 切换目录,再进行操作
$ git commit -m "Your commit message" --no-verify     # 跳过语法检查的钩子 Bypass Hooks pre-commit

branch,tag 操作

$ git tag rc-1                                        # 新建 tag, -a 'create release candidate 1'
$ git push origin --all                               # 推送所有 branches
$ git push origin --tags                              # 推送所有 tags