git命令使用手册

1.安装Git

  • Window:到Git官网下载安装:https://git-scm.com/downloads

2.配置全局用户Name和E-mail

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"git

3.初始化仓库

git initgithub

4.添加文件到Git仓库

git add <file>app

提示:可反复屡次使用,添加多个文件;ssh

5.提交添加的文件到Git仓库

git commit编辑器

而后会弹出一个Vim编辑器输入本次提交的内容;ide

或者ui

git commit -m "提交说明"加密

6.查看仓库当前的状态

git statusidea

7.比较当前文件的修改

$ git diff <file>spa

8.查看历史提交记录

git log

或者加上参数查看就比较清晰了

$ git log --pretty=oneline

9.回退版本

$ git reset --hard HEAD^

说明:在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,以此类推,若是须要回退几十个版本,写几十个^容易数不过来,因此能够写,例如回退30个版本为:HEAD~30。

若是你回退完版本又后悔了,想回来,通常状况下是回不来的,可是若是你能够找到你以前的commit id的话,也是能够的,使用以下便可:

$ git reset --hard + commit id

提示:commit id不须要写全,Git会自动查找;

补充说明:Git中,commit id是一个使用SHA1计算出来的一个很是大的数字,用十六进制表示,你提交时看到的一大串相似3628164...882e1e0的就是commit id(版本号);

Git中,版本回退速度很是快,由于Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向回退的版本,而后顺便刷新工做区文件;

10.查看操做的历史命令记录

$ git reflog

结果会将你以前的操做的commit id和具体的操做类型及相关的信息打印出来,这个命令还有一个做用就是,当你过了几天,你想回退以前的某次提交,可是你不知道commit id了,经过这个你可查找出commit id,就能够轻松回退了,用一句话总结:穿越将来,回到过去,so easy!

11.diff文件

git diff HEAD -- <file>

说明:查看工做区和版本库里面最新版本文件的区别,也能够不加HEAD参数;

12.丢弃工做区的修改

$ git checkout -- <file>

说明:适用于工做区修改没有add的文件

13.丢弃暂存区的文件

$ git reset HEAD <file>

说明:适用于暂存区已经add的文件,注意执行完此命令,他会将暂存区的修改放回到工做区中,若是要想工做区的修改也丢弃,就执行第12条命令便可;

14.删除文件

$ rm <file>

而后提交便可;

若是不当心删错了,若是尚未提交的话使用下面命令便可恢复删除,注意的是它只能恢复最近版本提交的修改,你工做区的修改是不能被恢复的!

$ git checkout -- <file>

15.建立SSH key

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

通常本地Git仓库和远程Git仓库之间的传输是经过SSH加密的,因此咱们能够将其生成的公钥添加到Git服务端的设置中便可,这样Git就能够知道是你提交的了;

16.与远程仓库协做

$ git remote add origin git@github.com:xinpengfei520/IM.git

删除本地库与远程库的关联:

$ git remote rm origin

做用:有时候咱们须要关联其余远程库,须要先删除旧的关联,再添加新的关联,由于若是你已经关联过了就不能在关联了,不过想关联多个远程库也是能够的,前提是你的本地库没有关联任何远程库,操做以下:

先关联Github远程库:

$ git remote add github git@github.com:xinpengfei520/IM.git

接着关联码云远程库:

$ git remote add gitee git@gitee.com:xinpengfei521/IM.git

如今,咱们用git remote -v查看远程库的关联信息,若是看到两组关联信息就说明关联成功了;

ok,如今咱们的本地库能够和多个远程库协做了

若是要推送到GitHub,使用命令:

$ git push github master

若是要推送到码云,使用命令:

$ git push gitee master

17.推送到远程仓库

$ git push -u origin master

注意:第一次提交须要加一个参数-u,之后不须要

18.克隆一个远程库

$ git clone git@github.com:xinpengfei520/IM.git

19.Git分支管理

建立一个分支branch1

$ git branch branch1

切换到branch1分支:

$ git checkout branch1

建立并切换到branch1分支:

$ git checkout -b branch1

查看分支:

$ git branch

提示:显示的结果中,其中有一个分支前有个*号,表示的是当前所在的分支;

合并branch1分支到master:

$ git merge branch1

删除分支:

$ git branch -d branch1

20.查看提交的历史记录

$ git log

命令能够看到分支合并图

git log --graph

21.合并分支

禁用Fast forward模式合并分支

$ git merge --no-ff -m "merge" branch1

说明:默认Git合并分支时使用的是Fast forward模式,这种模式合并,删除分支后,会丢掉分支信息,因此咱们须要强制禁用此模式来合并;

补充内容:实际开发中分支管理的策略

  • master分支应该是很是稳定的,也就是仅用来发布新版本,平时不能在上面提交;
  • 咱们能够新开一个dev分支,也就是说dev分支是不稳定的,到版本发布时,再把dev分支合并到master上,在master分支发布新版本;
  • 你和你的协做者平时都在dev分支上提交,每一个人都有本身的分支,时不时地往dev分支上合并就能够了;

22.保存工做现场

$ git stash

做用:当你须要去修改其余内容时,这时候你的工做尚未作完,先临时保存起来,等干完其余事以后,再回来回复现场,再继续干活;为何?由于暂存区是公用的,若是不经过stash命令隐藏,会带到其它分支去;

查看已经保存的工做现场列表:

$ git stash list

恢复工做现场(恢复并从stash list删除):

$ git stash pop

或者:

git stash apply

恢复工做现场,但stash内容并不删除,若是你须要删除执行以下命令:

$ git stash drop

恢复指定的stash:

$ git stash apply stash@{0}

说明:其中stash@{0}为git stash list中的一种编号

23.丢弃一个没有被合并过的分支

强行删除便可:

$ git branch -D <name>

做用:实际开发中,添加一个新feature,最好新建一个分支,若是要丢弃这个没有被合并过的分支,能够经过上面的命令强行删除;

24.查看远程库的信息

$ git remote

显示更详细的信息:

$ git remote -v

25.推送分支

推送master到远程库

$ git push origin master

推送branch1到远程库

$ git push origin branch1

26.建立本地分支

$ git checkout -b branch1 origin/branch1

说明:若是远程库中有分支,clone以后默认只有master分支的,因此须要执行如上命令来建立本地分支才能与远程的分支关联起来;

27.指定本地branch1分支与远程origin/branch1分支的连接

$ git branch --set-upstream branch1 origin/branch1

做用:若是你本地新建的branch1分支,远程库中也有一个branch1分支(别人建立的),而恰好你也没有提交过到这个分支,即没有关联过,会报一个no tracking information信息,经过上面命令关联便可;

28.建立标签

$ git tag <name>

例如:git tag v1.0

查看全部标签:

$ git tag

对历史提交打tag

先使用$ git log --pretty=oneline --abbrev-commit命令找到历史提交的commit id

例如对commit id 为123456的提交打一个tag:

$ git tag v0.9 123456

查看标签信息:

$ git show <tagname>

eg:git show v1.0

建立带有说明的标签,用-a指定标签名,-m指定说明文字,123456为commit id:

$ git tag -a v1.0 -m "V1.0 released" 123456

用私钥签名一个标签:

$ git tag -s v2.0 -m "signed V2.0 released" 345678

说明:签名采用PGP签名,所以,必须先要安装gpg(GnuPG),若是没有找到gpg,或者没有gpg密钥对,就会报错,具体请参考GnuPG帮助文档配置Key;

做用:用PGP签名的标签是不可伪造的,由于能够验证PGP签名;

删除标签:

$ git tag -d <tagname>

删除远程库中的标签:

好比要删除远程库中的 V1.0 标签,分两步:

[1] 先删除本地标签:$ git tag -d V1.0

[2] 再推送删除便可:$ git push origin :refs/tags/V1.0

推送标签到远程库:

$ git push origin <tagname>

推送全部标签到远程库:

$ git push origin --tags

29.自定义Git设置

Git显示颜色,会让命令输出看起来更清晰、醒目:

$ git config --global color.ui true

设置命令别名:

$ git config --global alias.st status

说明:--global表示全局,即设置完以后全局生效,st表示别名,status表示原始名

好了,如今敲git st就至关因而git status命令了,是否是方便?

固然还有其余命令能够简写,这里举几个:不少人都用co表示checkout,ci表示commit,br表示branch...
根据本身的喜爱能够设置便可,我的以为不是很推荐使用别名的方式;

推荐一个比较丧心病狂的别名设置:

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"

效果本身去体会...

其余说明:配置的时候加上--global是针对当前用户起做用的,若是不加只对当前的仓库起做用;每一个仓库的Git配置文件都放在 .git/config 文件中,咱们能够打开对其中的配置做修改,能够删除设置的别名;而当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中,咱们也能够对其进行配置和修改。

30.忽略文件规则

原则:

  • 忽略系统自动生成的文件等;
  • 忽略编译生成的中间文件、可执行文件等,好比Java编译产生的.class文件,自动生成的文件就不必提交;
  • 忽略你本身的带有敏感信息的配置文件,我的相关配置文件;
  • 忽略与本身相关开发环境相关的配置文件;
  • ...

使用:在Git工做区的根目录下建立一个特殊的 .gitignore 文件,而后把要忽略的文件名或者相关规则填进去,Git就会自动忽略这些文件,不知道怎么写的可参考:https://github.com/github/gitignore,这里提供了一些忽略的规则,可供参考;

若是你想添加一个被 .gitignore 忽略的文件到Git中,但发现是添加不了的,因此咱们可使用强制添加$ git add -f <file>

或者咱们能够检查及修改 .gitignore 文件的忽略规则:

$ git check-ignore -v <file>

Git会告诉咱们具体的 .gitignore 文件中的第几行规则忽略了该文件,这样咱们就知道应该修改哪一个规则了;

如何忽略已经提交到远程库中的文件?
若是你已经将一些文件提交到远程库中了,而后你想忽略掉此文件,而后在 .gitignore 文件中添加忽略,然而你会发现并无生效,由于Git添加忽略时只有对没有跟踪的文件才生效,也就是说你没有add过和提交过的文件才生效,按以下命令:

好比说:咱们要忽略.idea目录,先删除已经提交到本地库的文件目录

git rm --cached .idea

格式:git rm --cached + 路径

若是提示:fatal: not removing '.idea' recursively without -r

加个参数 -r 便可强制删除

$ git rm -r --cached .idea

而后,执行git status会提示你已经删除.idea目录了,而后执行commit再push就能够了,此时的.idea目录是没有被跟踪的,将.idea目录添加到 .gitignore 文件中就能够忽略了。

附图:

相关文章
相关标签/搜索