本文为已归档的历史博客内容,其内容可能随着时间发生已经改变。
This article is archived from my previous blog, so the content maybe have changed now.


The things U must know about Git/GitHub.

Info:

GitHub Official Course

Note

Introduction

在当前执行语句目录处初始化,生成 .git 文件夹:

git init <new_project_name>

打开项目目录结构:

open .git 

更改配置文件:

cat .git/config

连接远程库:

git remote add origin <project_address>

查看配置文件:

cat .git/config

Setup

安装命令行 Git:Git

安装 GUI Git:GitHub Desktop

注册 GitHub

Config

全局配置 user.name & user.email

git config --global user.name <user_name>
git config --global user.email <user_email>

全局配置行尾和颜色:

// 配置行尾以使得适配不同平台
git config --global core.autocrlf true
git config --global core.autocrlf input

// 不同颜色的代码指示不同的状态
git config --global color.ui auto

由于 Windows 使用回车和换行两个字符来结束一行,而 Mac 和 Linux 只使用换行一个字符。所以使用 core.autocrlf: 1. Windows:Git 可以在提交时自动地把行结束符 CRLF 转换成 LF,而在签出代码时把 LF 转换成 CRLF 2. Mac/Linux:Git 可以在提交时自动地把行结束符 CRLF 转换成 LF,但签出时不转换

本地配置(优先级大于 global):

git config --local user.name <user_name>
git config --local user.email <user_name>

Init

Commit

Diff

Log

Remove

Move

Ship of Theseus

Ignore

Branch

Checkout

Merge

Network

GUI

Intro to GitHub

Forking

Pull Requests

Reset

Reflog

Rebase

Git 教程

Git 简介 & 安装 Git

创建版本库

初始化(test is an example):

mkdir test
cd test

git init

添加(每次一个文件,readme.txt is an example):

vim readme.txt

git add readme.txt

提交(可多个文件,Update is an example):

git commit -m "Update"

时光机穿梭

查看状态:

git status

查看各版本修改内容:

git diff

版本回退

查看历史修改记录:

git log

git log --pretty=oneline

版本回退(4e432c is an example):

// HEAD -> current version
git reset --hard HEAD^

git reset --hard HEAD^^

git reset --hard 4e432c

// 4e432c: Commit ID

查看命令记录:

git reflog

Working Directory & Staging area

Working Directory: learn/ Repository: .git/ Staging Area(Index): git add ... 后添加到即此

管理修改

git commit 只提交在 Staging Area 的版本(即 git add 后)

修改 1 -> git add -> 修改 2 -> git commit:只提交第一次更改

撤销修改

撤销 Working Directory 的修改:

git checkout -- readme.txt
  1. 修改前执行了:git add readme.txt:回到 Staging Area 状态
  2. 修改前执行了:git commit -m "Ud":回到 Repository 状态

git add 后,将放入到 Staging Area 的重新放入 Working Directory:

git reset HEAD readme.txt

git checkout -- readme.txt

删除文件

rm readme.txt 在文件夹删除

从 Repository 删除(rm is an example):

git rm readme.txt

git commit -m "rm"

从 Repository 恢复(前提是删除未提交):

git checkout -- readme.txt

远程仓库

GitHub 配置略

添加远程库

关联 GitHub 远程库(kingcos is an example):

git remote add origin git@github.com:kingcos/learngit.git

推送本地库 master 分支至远程库 master 分支:

git push -u origin master

推送本地提交至远程库:

git push origin master

从远程库克隆

克隆远程库至本地:

git clone git@github.com:kingcos/gitskills.git

ls gitskills

Git 支持多种协议,包括 https,但通过 ssh 支持的原生 git 协议速度最快

分支管理

创建与合并分支

创建分支(dev is an example.):

git branch dev

切换分支:

git checkout dev

创建并切换分支:

git checkout -b dev

查看分支(当前分支前有 *):

git branch

合并分支到当前分支(Fast forward 模式):

git merge dev

删除分支:

git branch -d dev

解决冲突

当 Git 无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。

查看分支合并图:

git log --graph

git log --graph --pretty=oneline --abbrev-commit

分支管理策略

Fast forward 模式:删除分支后,会丢掉分支信息

普通模式合并分支(test is an example):可查看历史合并

git merge --no-ff -m "test" dev

分支策略: - master 分支仅用来发布新版本 - dev 分支供平时工作,推送 - 多人协作时,在各自的分支工作,并合并到 dev

Bug 分支

保存当前 Working Directory 状态:

git stash

列出保存的状态:

git stash list

恢复状态(并删除 stash 内容):

git stash pop stash@{0}

git stash apply stash@{0}
git stash drop stash@{0}

Feature 分支

删除未合并的分支(feature is an example):

git branch -D feature

多人协作

查看远程库信息:

git remote

git remote -v

推送分支至远程库(master is an example):

git push origin master

推送远程库策略:master 主分支要时刻与远程同步

创建本地远程库不存在的 dev 分支:

git chechout -b dev origin/dev

同时修改并提交分支会失败,解决方法:

// 指定本地 dev 分支与远程 origin/dev 分支连接
git branch --set-upstream-to origin/dev dev

git pull

// pull 后会自动 merge 但有冲突需手动解决,详见本章 解决冲突 一节

git push origin dev

标签管理

标签是 Repository 的快照,指向某个 commit 的指针(类似分支,但不可移动)。

创建标签

默认在最新的 commit 上创建标签(v1.0 is an example):

git tag v1.0

查看所有标签(按字母序):

git tag

在其它 commit 上创建标签(0cbfa8c & v0.9 is an example):

// 列出修改记录
git log --pretty=oneline --abbrev-commit

// 为特定 Commit ID 创建标签
git tag v0.9 0cbfa8c

显示标签 commit

git show v0.9

创建带有说明的标签(0cbfa8c & v0.1 is an example):

git tag -a v0.1 -m "version 0.1 released" 0cbfa8c

*密钥签名*(需安装 GnuPG3a51e70 & v0.2 is an example):

git tag -s v0.2 -m "signed version 0.2 released" 3a51e70

操作标签

删除标签:

git tag -d v0.1

推送标签至远程库:

git push origin v1.0

// 推送全部未推送的本地标签
git push origin --tags

删除远程标签:

// 删除本地标签
git tag -d v0.9

git push origin :refs/tags/v0.9

使用 GitHub

自定义 Git

显示颜色:

git config --global color.ui true

忽略特殊文件

GitHub 配置文件

编写:.gitignore 并提交

配置别名

--global 参数是全局参数,即对本机均适用,不加即只针对当前仓库

git st as git status

git config --global alias.st status

git co as git checkout git ci as git commit git br as git branch

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

git lg

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"

配置文件:[alias] 后的即别名

全局:

cat .git/config 

普通:

cat .gitconfig

搭建 Git 服务器