GitHub 学习笔记

前言:一些学习Github后留下的笔记,因为每次都要翻来翻去查阅结果本子被我翻烂了。今天终于忍无可忍,遂整理成一篇文章。其实最初学习使用Git,并不是从上面正儿八经像《ProGit》之类的书上学来的,而是从《Python Web开发 测试驱动方法》跟着跟着练起来,后来才慢慢熟悉了Gayhub上的各种玩法。

Github Favorited Markdown

日常使用和 Markdown 相差无几,具体的可以看这里:GitHub Flavored Markdown Spec

Git

基本配置

  1. 设置姓名和邮箱地址
    $ git config --global user.name "[First name] [Lastname]" 
    $ git config --global user.email "[Name]@[Domain]"
    
  2. 提高命令输出的可读性
    $ git config --global color.ui auto
    
  3. 设置SSH Key
    $ ssh-keygen -t rsa -C "[Name]@[Domain]"
    
  4. 添加公开密钥
    Github右上角头像 >> Settings >> SSH and GPG keys >> New SSH key >> 复制id_rsa.pub内容并提交
    
  5. 测试连通
    ssh -T git@github.com
    

Git 的配置

(缺省值状态下为 Local, 具体内容均保存在 .git/config 文件中。优先级 Local > Global > System,global 的配置被保存在用户的根目录下的 .gitconfig 文件中)
  • 仅对当前仓库有效
    $ git config --local
    
  • 对当前用户的所有仓库有效
    $ git config --global
    
  • 对系统所有登录的用户有效
    $ git config --system
    
  • 显示 Config 的配置信息
    $ git config --list --local
    
  • 清除配置
    $ git config --unset --local user.name
    

基本操作

如果是一个人玩的话,掌握这些操作就没问题了(大概
  • 将当前文件夹创建为 Git 仓库 :git init .
  • 添加需要忽略的文件(夹):echo "whatYouWantTo.Ignore*" >> .gitignore
  • 添加当前文件夹中的其他内容:git add .
  • 查看当前提交状态:git status
  • 将修改过的文件放入暂存区:git add -u
  • 快速提交:git commit -am "[What you want to say]"
  • 清除已提交的文件:git rm -r --cached folder/filename/*
  • 查看两次提交之间的差异:git diff [filename or blank for all]
  • 显示提交记录:git log --graph --oneline --decorate
  • 添加远程仓库:git remote add [branch_name] [repo_address]
  • 从另一个存储库下载对象和引用:git fetch [repo_name]
  • 关键字段查询:grep -E "class|def" folder/filename
  • 还原所有未提交的改动:git reset --hard [first six alnum]
  • 推送标签: git tag LIVE && git push origin LIVE
  • 回滚位于暂存区上的所有变更:git reset --hard
  • 切换分支:git checkout branchname
  • 删除分支:git branch [-d/-D] branchHash

其他小技巧

注:Git的参数顺序是 命令 哈希值 — 具体文件名,涉及具体文件名时,--不可省略。

提交重命名的文件

# 普通方法
$ mv readme readme.md
$ git add readme.md
$ git rm readme

# Git 方法
$ git mv readme readme.md

查看 Git 的历史记录

  • 查看所有分支就近四个历史记录
    $ git log --all -n4
    
  • 查看指定分支的历史记录
    $ git log --oneline branchname
    
  • 查看分支历史
    $ git branch
    

将分支修改为 Fast-Forward 并与远程仓库合并

  • 使用 Merge 方法
    $ git merge branchname
    

从浏览器打开某一命令的帮助

$ git help --web log

修改某次提交的信息

  • 修改最新提交的信息
    $ git commit --amend
    
  • 修改之前提交的信息或合并提交
    $ git rebase -i hashValueOfItFatherNode
    
  • 恢复暂存区为 Head
    $ git reset HEAD
    

合并请求

  1. 先 Fork 别人的代码,然后从自己的仓库用不带工作区的方式克隆到本地
    git clone [git_repo_address.git]
    
  2. 在本地创建一个分支
    git checkout -b some-feature
    
  3. 本地提交
    git commit -am "Some Feature"
    
  4. 修改完成后,就可以把代码扔回自己的仓库了
    git push origin some-branch
    
  5. 最后在网页上 New Pull Request,提交 Issue 即可。

搁置开发

如果在当前仓库中碰到了加急任务,可以使用 Stash 搁置当前的分支。
  • 启用搁置
    $ git stash
    
  • 查看搁置列表
    $ git stash list
    
  • 复制搁置至当前指针
    $ git stash apply
    
  • 剪切搁置至当前指针(会从 list 中删除记录)
    $ git stash pop
    

Git 的备份传输协议

常用协议 语法格式 说明
本地协议1 /path/to/repo.git 哑协议
本地协议2 file:///path/to/repo.git 智能协议
http/https 协议 http(s)://git-server.com:port/path/to/repo.git 智能协议,开源协作常用
ssh协议 user@git-server.com:path/to/repo.git 智能协议,内部合作中常用
  • 哑协议和智能协议的却别:哑协议进度不可见,速度更慢。

可视化查看 Git 分支

首先要进入仓库的目录,然后使用以下命令:
$ gitk --all
图形界面的其他内容可以参阅官方文档

不同人修改了同一/不同文件的同一/不同区域

多人协作冲突的大部分时候,都可以根据 git status 的提示进行相应修改。基本思路如下:
  1. 将远程仓库 Pull 到本地
  2. 打开冲突的文件,按照 Git 的提示进行相应的删减
  3. 重新 Commit 和 Push

HUB

整理中

常用搜索语法

语法 用法 例子
in 查找某个文件内的关键字 Keywords in:readme
stars 按收藏数查找 stars:>1000
filename 查找相关文件 ‘keywords’ filename:.py
其他搜索语法可以参考 官方文档

参考资料

评论