git个人使用笔记

最前面

git,分布式版本控制系统

2002年,BitMover公司出于人道主义精神,授权Linux社区免费使用BitKeeper这个版本控制系统

2005年,开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发现了,于是BitMover公司怒了,要收回Linux社区的免费使用权

于是,Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!

一个月之内,Linux系统的源码已经由Git管理了!

2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等

如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git了。

以前有个软件也叫GIT(GNU Interactive Tools),结果Git就只能叫git-core了。由于Git名气实在太大,后来就把GNU Interactive Tools改成gnuitgit-core正式改为git

git靠谱查询

git安装与配置

intelij上集成好的git也非常好用,能满足大多数时候的要求;其余使用命令行也很顺手。所以,个人不推荐使用GUI。

其余若有GUI需求,看这里GUI Clientssource treetortoisegitgit-fork还不错,望自测。

1.git安装

2.git配置

Git本身支持HTTPS和SSH两种协议,HTTPS每次pull、push时要求输入密码,建议使用SSH。

git配置主要为以下三个步骤

至此,基础配置完成。

git常用命令/操作

以下按照场景划分

git 有严格的本地仓库/远程仓库划分,所以,严格把控版本发布,只在自己的分支上造次就好。

git rebase

git rebase -i HEAD~3                    ## rebase 3 latest commit
git rebase -i <startpoint> <endpoint>   ## rebase range (startpoint,endpoint]
git rebase -i <commitHash>              ## rebase range (commitHash,HEAD]

-i(--interactive):弹出交互式的界面进行编辑合并。

<startpoint> <endpoint>则指定了一个编辑区间(注:该区间左开右闭);

不指定<endpoint>,则该区间的终点默认是当前分支HEAD所指向的commit。 指令解释(交互编辑时使用):

p, pick = use commit
r, reword = use commit, but edit the commit message
e, edit = use commit, but stop for amending
s, squash = use commit, but meld into previous commit
f, fixup = like "squash", but discard this commit's log message
x, exec = run command (the rest of the line) using shell
d, drop = remove commit

git rebase 过程,可能会出现冲突;若出现则需要先解决冲突,再继续rebase。

冲突提示信息:git rebase -i resumeerror: could not apply ...

## 查看冲突
git status
## 解决冲突之后,本地提交
git add .
## rebase 继续
git rebase --continue

git cherry-pick

git cherry-pick <commitHash>                            ## cherry-pick commit
git cherry-pick <commitHash> <commitHash> <commitHash>  ## multi cherry-pick commit
git cherry-pick <feature>                               ## cherry-pick latest commit on feature
git cherry-pick A..B                                    ## cherry-pick latest continuous commit, range (A,B]
git cherry-pick A^..B                                   ## cherry-pick latest continuous commit, range [A,B]
## 上面的命令可以转移从 A 到 B 的所有提交。它们必须按照正确的顺序放置:提交 A 必须早于提交 B,否则命令将失败,但不会报错。