Preface · 序
本文为已归档的历史博客内容,其内容可能随着时间发生已经改变。
This article is archived from my previous blog, so the content maybe have changed now.。
Git/GitHub-Note
2015.11.24 by kingcosThe 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
:
- Windows:Git 可以在提交时自动地把行结束符 CRLF 转换成 LF,而在签出代码时把 LF 转换成 CRLF
- 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
- 修改前执行了:
git add readme.txt
:回到 Staging Area 状态 - 修改前执行了:
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
密钥签名(需安装 GnuPG,3a51e70
& 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
忽略特殊文件
编写:.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 服务器
略