Git 学习笔记

基本操作

设置全局用户信息

git config --global user.name "username"
git config --global user.email "username@users.noreply.github.com"

创建本地版本库

通过git init命令把当前目录变成 Git 可以管理的仓库, 即初始化(Initialized) Git 仓库.

添加文件到 Git 仓库

  1. 使用命令git add <filename>把文件添加到仓库暂存区(Stage), 可以多次使用添加多个文件, 实际输入不包含符号<>, 下同; 使用git add -A添加所有文件.
  2. 使用命令git commit -m "<massage>"把文件提交到仓库分支.
git add file1.txt
git add file2.txt file3.txt
git commit -m "add 3 files."

版本回退

  1. 要随时掌握工作区的状态, 使用git status命令.
  2. 如果git status告诉你有文件被修改过, 用git diff可以查看修改内容.
  3. 使用git log可以查看提交历史记录, 以便确定要回退到哪个版本.
  4. HEAD指向的版本就是当前版本, 因此, Git 允许我们在版本的历史之间穿梭, 使用命令git reset --hard commit_id. (注意: HEAD表示当前版本, 上一个版本就是HEAD^, 上上一个版本就是HEAD^^, 当然往上 100 个版本写 100 个^比较容易数不过来, 所以写成HEAD~100)
  5. 要重返未来, 用git reflog查看命令历史, 以便确定要回到未来的哪个版本.

撤销修改

  • 场景 1
    当你改乱了工作区某个文件的内容, 想直接丢弃工作区的修改时, 用命令git checkout -- file. (小提示: git checkout其实是用版本库里的版本替换工作区的版本, 无论工作区是修改还是删除, 都可以“一键还原”)
  • 场景 2
    当你不但改乱了工作区某个文件的内容, 还添加到了暂存区时, 想丢弃修改, 分两步, 第一步用命令git reset HEAD <file>, 就回到了场景 1, 第二步按场景 1 操作.
  • 场景 3
    已经提交了不合适的修改到版本库时, 想要撤销本次提交, 参考版本回退一节, 不过前提是没有推送到远程库.

删除文件

命令git rm用于删除一个文件. 如果一个文件已经被提交到版本库, 那么你永远不用担心误删, 但是要小心, 你只能恢复文件到最新版本, 你会丢失最近一次提交后你修改的内容.

远程仓库

创建 SSH Key

在本地 Shell 键入命令

ssh-keygen -t rsa -C "youremail@example.com"

如果一切顺利的话, 可以在用户主目录里找到.ssh 目录, 里面有id_rsaid_rsa.pub. 两个文件, 这两个就是 SSH Key 的秘钥对, id_rsa是私钥, 不能泄露出去, id_rsa.pub是公钥, 可以放心地告诉任何人.

添加 SSH Key

登陆 GitHub, 打开SSH keys页面, 点“Add SSH Key”, 填上任意 Title, 在 Key 文本框里粘贴id_rsa.pub文件的内容

添加远程库

!> 小提示: 适用于先有本地库, 后有远程库的场景

使用命令git remote add origin git@github.com:<username>/<reponame>.git把一个已有的本地仓库与远程库(origin)关联

关联后, 使用命令git push -u origin master第一次推送master分支的所有内容;

此后, 每次本地提交后, 只要有必要, 就可以使用命令git push origin master推送最新修改.

  • 关联两个远程库
# github
git remote add github git@github.com:<username>/<reponame>.git #关联 github
git push github master #推送到 github
# gitee
git remote add gitee git@gitee.com:<username>/<reponame>.git #关联码云
git push gitee master #推送到码云
  • 解除关联

使用git remote rm origin命令.

从远程库克隆

!> 小提示: 适用于先有远程库, 后有本地库的场景. 假设我们从零开发, 那么最好的方式是先创建远程库, 然后再从远程库克隆.

# ssh 方式
git clone git@github.com:<username>/<reponame>.git
# https 方式
git clone https://github.com/<username>/<reponame>.git

Git 支持多种协议, 包括 https, 但每次推送都必须输入口令; 而通过 ssh 支持的原生 git 协议速度最快且推送方便.

分支管理

创建与合并分支

  • 创建+切换分支
# 创建+切换分支
git checkout -b <name> #相当于以下两条命令
# 创建分支
git branch <name>
# 切换分支
git checkout <name>
  • 查看分支
git branch #列出所有分支, 当前分支前面会标一个 * 号标志
* dev
  master
  • 合并分支
# 切换回 master 分支
git checkout master
# 合并指定 dev 分支到当前分支
git merge dev

合并分支时, 加上--no-ff参数就可以用普通模式合并, 合并后的历史有分支, 能看出来曾经做过合并, 而fast forward合并就看不出来曾经做过合并.

git merge --no-ff -m "<massage>" dev
  • 删除分支
# 删除本地分支
git branch -d <name>
# 强行删除
git branch -D <name>

Bug 分支

修复 bug 时, 我们会通过创建新的 bug 分支进行修复, 然后合并, 最后删除;

当手头工作没有完成时, 先把工作现场git stash一下, 然后去修复 bug, 修复后, 再git stash pop, 回到工作现场.

多人协作

# 查看远程库的信息
git remote -v
# 推送分支
git push origin master
# 克隆分支
git clone git@github.com:<username>/<reponame>.git
# 在本地创建和远程分支对应的分支
git checkout -b <branch-name> origin/<branch-name>
# 从远程抓取分支
git pull
# 建立本地分支和远程分支的关联
git branch --set-upstream <branch-name> origin/<branch-name>

Rebase

  • 用法
git rebase

rebase 操作可以把本地未 push 的分叉提交历史整理成直线;
rebase 的目的是使得我们在查看历史提交的变化时更容易, 因为分叉的提交需要三方对比.

标签管理

创建标签

在 Git 中打标签非常简单, 首先, 切换到需要打标签的分支上, 然后, 敲命令git tag <tagname>就可以打一个新标签:

git tag v1.0

之后可以用命令git tag查看所有标签, 用git show <tagname>查看标签信息, 还可以创建带有说明的标签, 用-a指定标签名, -m指定说明文字:

git tag -a <tagname> -m "<massage>"

要想给历史 common 打标签, 则先输入git log --pretty=oneline --abbrev-commit找到历史提交的 commit id, 然后打上就可以了:

git tag <tagname> <commit_id>

操作标签

# 删除本地标签
git tag -d <tagname>
# 推送一个标签到远程
git push origin <tagname>
# 推送全部尚未推送到远程的本地标签
git push origin --tags
# 删除远程标签
git tag -d <tagname> #先删除本地标签
git push origin :refs/tags/<tagname> #再删除远程标签

其他操作

  • 显示高亮

使用git config --global color.ui true命令

  • 忽略特殊文件

忽略某些文件时, 需要编写.gitignore
检验.gitignore的标准是git status命令是不是说working directory clean.

使用git add -f <filename>无视.gitignore强制添加到 Git
使用git check-ignore -v <filename>检查是否有规则限制了该文件的提交

  • 配置别名
git config --global alias.st status #使用 st 表示 status
git config --global alias.co checkout #使用 co 表示 checkout
git config --global alias.ci commit #使用 ci 表示 commit
git config --global alias.br branch #使用 br 表示 branch
git config --global alias.unstage 'reset HEAD' #简化撤销命令
git config --global alias.last 'log -1' #配置一个 git last, 让其显示最后一次提交信息
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" #美化显示

每个仓库的 Git 配置文件都放在.git/config文件中
而当前用户的 Git 配置文件放在用户主目录下的一个隐藏文件.gitconfig

以上根据廖雪峰老师的Git 教程整理而成, 在此感谢!

补充说明

删除远程分支

git push <远程名> :<分支名> #注意冒号前有一个空格
# 示例 
git push origin :dev #删除远程 dev 分支

克隆远程分支到当前目录

git clone <仓库链接> tmp && mv tmp/.git . && rm -rf tmp

克隆指定分支

默认 clone 的是 master 分支, 使用以下命令 clone 指定分支:

git clone -b <分支名> <仓库链接>
Last modification:October 9th, 2019 at 11:06 pm
如果觉得我的文章对你有用,请随意赞赏

Leave a Comment