github经常使用命令集合

建立版本库

mkdir learngit
cd learngit
pwd

pwd命令用于显示当前目录,在个人电脑中,这个仓库位于/users/michael/learngit
如果window系统,为了不遇到各类莫名其妙的问题,请确保目录名(包括父目录)不包含中文git

仓库初始化

git init

经过这个命令把目录变成git能够管理的仓库
若是你没有看到.git目录,那是由于这个目录默认是隐藏的,用ls -ah命令就能够看见。github

文件添加到暂存区

git add <file>

把文件添加到暂存区安全

提交到版本库

git commit -m "message"

简单解释一下git commit命令,-m后面输入的是本次提交的说明,能够输入任意内容,固然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。app

执行后输出:ssh

$ git commit -m "wrote a readme file"
[master (root-commit) eaadf4e] wrote a readme file
 1 file changed, 2 insertions(+)
 create mode 100644 readme.txt

git commit命令执行成功后会告诉你,1 file changed:1个文件被改动(咱们新添加的readme.txt文件);2 insertions:插入了两行内容(readme.txt有两行内容)学习

git status

clipboard.png
git status命令可让咱们时刻掌握暂存区当前的状态,上面的命令输出告诉咱们,readme.txt被修改过了,但尚未准备提交的修改。fetch

git diff

git diff顾名思义就是查看difference,知道了对readme.txt做了什么修改后,再把它提交到仓库就放心多了,提交修改和提交新文件是同样的两步ui

git log

git log命令显示从最近到最远的提交日志,咱们能够看到3次提交,最近的一次是append GPL,上一次是add distributed,最先的一次是wrote a readme filethis

clipboard.png
若是嫌输出信息太多,看得眼花缭乱的,能够试试加上--pretty=oneline参数url

clipboard.png
你看到的一大串相似1094adb...的是commit id(版本号)

git reset --hard HEAD^

回退到上一个版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^
最新的那个版本add disbributed已经看不到了!比如你从21世纪坐时光穿梭机来到了19世纪,想再回去已经回不去了,肿么办?

办法其实仍是有的,只要上面的命令行窗口尚未被关掉,你就能够顺着往上找啊找啊,找到那个add disbributed的commit id是 2bfef3b...,因而就能够指定回到将来的某个版本:

clipboard.png

git reflog

查找每一次命令的记录

git checkout -- file

前提,尚未git add到暂存区,撤销修改就回到和版本库如出一辙的状态

git reset HEAD <file>
git checkout -- file

已提交到暂存区,需经过以上命令撤销修改

删除

rm test.txt

在本地删除文件

git status

查看状态

clipboard.png

git rm test.txt

把版本库中的test.txt删除

删除错误,恢复

git checkout -- file

git checkout实际上是用版本库里的版本替换工做区的版本,不管工做区是修改仍是删除,均可以“一键还原”
注意:历来没有被添加到版本库就被删除的文件,是没法恢复的!

远程仓库

1.建立SSH Key

ssh-keygen -t rsa -C "youre-mail@qq.com"

若是一切顺利的话,能够在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,能够放心地告诉任何人。

2.登陆github,打开“Account settings”,“SSH Keys”页面,而后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容

clipboard.png

clipboard.png
为何GitHub须要SSH Key呢?由于GitHub须要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,因此,GitHub只要知道了你的公钥,就能够确认只有你本身才能推送。

3.在Repository name填入learngit,其余保持默认设置,点击“Create repository”按钮,就成功地建立了一个新的Git仓库

clipboard.png

咱们根据GitHub的提示,在本地的learngit仓库下运行命令

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

请千万注意,把上面的michaelliao替换成你本身的GitHub帐户名,添加后,远程库的名字就是origin,这是Git默认的叫法,也能够改为别的,可是origin这个名字一看就知道是远程库

git push -u origin master

因为远程库是空的,咱们第一次推送master分支时,加上了-u参数

clipboard.png

推送成功后,能够马上在GitHub页面中看到远程库的内容已经和本地如出一辙:

clipboard.png

从如今起,只要本地做了提交,就能够经过命令

git push origin master

先建设远程库,再建设本地库

首先,登录GitHub,建立一个新的仓库,名字叫gitskills:

clipboard.png

咱们勾选Initialize this repository with a README,这样GitHub会自动为咱们建立一个README.md文件。建立完毕后,能够看到README.md文件:

clipboard.png

如今,远程库已经准备好了,下一步是用命令git clone克隆一个本地库:

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

注意把Git库的地址换成你本身的,而后进入gitskills目录看看,已经有README.md文件了:

$ cd gitskills
$ ls
README.md

很是重要的分支管理

分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另外一个你正在另外一个平行宇宙里努力学习SVN。
若是两个平行宇宙互不干扰,那对如今的你也没啥影响。不过,在某个时间点,两个平行宇宙合并了,结果,你既学会了Git又学会了SVN!

clipboard.png

git checkout -b dev

建立dev分支,而后切换到dev分支
git checkout命令加上-b参数表示建立并切换,至关于如下两条命令:

git branch dev
git checkout dev
Switched to branch 'dev'

查看当前分支

git branch

切换分支

git checkout master

删除分支

git branch -d dev

当有冲突的时候,修改冲突,选择要保留下来的语句,而后git add 和 git commit.

clipboard.png
查看一下readme.txt中的内容

Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1

Git用<<<<<<<,=======,>>>>>>>标记出不一样分支的内容,咱们修改以下后保存:

Creating a new branch is quick and simple.

在普通模式下合并分支

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

由于本次合并要建立一个新的commit,因此加上-m参数,把commit也加进去
Git分支十分强大,在团队开发中应该充分应用。
合并分支时,加上--no-ff参数就能够用普通模式合并,合并后的历史有分支,能看出来曾经作过合并,而fast forward合并就看不出来曾经作过合并

Git还提供了一个stash功能,能够把当前工做现场“储藏”起来,等之后恢复现场后继续工做

git stash

git查看工做现场列表

git stash list

恢复stash且把stash内容删除

git stash pop

至关于

git stash apply //恢复
git stash drop  //删除

强行删除分支

git branch -D <branch name>

查看远程库信息:

git remote -v

如果有一个小伙伴要与你在相同分支下开发,这时,你开发完成后,他也开发完成,大家修改了同个地方,这时候就会冲突,你要先把它拉取下来:

git pull

这时候有可能出现拉取失败并提示:

clipboard.png

git pull也失败了,缘由是没有指定本地dev分支与远程origin/dev分支的连接,根据提示,设置dev和origin/dev的连接:

git branch --set-upstream-to=origin/dev dev

再pull:

git pull

把分叉的提交历史“整理”成一条直线,看上去更直观

git rebase

标签管理

发版本的时候,这个版本会有一个tag,这个tag对应的是某一个commit-id,可是有了commit-id为何还要有tag,缘由是commit-id太长太冗余,是一串长长的数字,如有某个tag例如v1.2,简短好识别

新建标签:

git tag <name>

查看全部标签:

git tag

为特定的commit打上标签:

git tag v0.9 f52c633

查看标签信息:

git show <tagname>

clipboard.png

还能够建立带有说明的标签,用-a指定标签名,-m指定说明文字

git tag -a v0.1 -m "version 0.1 released" 1094adb

若是标签打错了,还能够删除

git tag -d v0.1

由于建立的标签都只存储在本地,不会自动推送到远程。因此,打错的标签能够在本地安全删除。

若是要推送某个标签到远程,使用命令

git push origin <tagname>

一次性推送所有还没有推送到远程的本地标签:

git push origin --tag

若是标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:

git tag -d v0.1
git push origin :refs/tags/v0.9

同时使用github和gitee

要创建两个远程库,咱们能够删除已有的GitHub远程库:

git remote rm origin

关联码云的远程库:

git remote add gitee git@gitee.com:liaoxuefeng/learngit.git

再关联github的远程库

git remote add github git@github.com:michaelliao/learngit.git

如今,咱们用git remote -v查看远程库信息,能够看到两个远程库

git remote -v
gitee    git@gitee.com:liaoxuefeng/learngit.git (fetch)
gitee    git@gitee.com:liaoxuefeng/learngit.git (push)
github    git@github.com:michaelliao/learngit.git (fetch)
github    git@github.com:michaelliao/learngit.git (push)码

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

git push github master

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

git push gitee master

配置别名

若是敲git st就表示git status那就简单多了,固然这种偷懒的办法咱们是极力同意的。
咱们只须要敲一行命令,告诉Git,之后st就表示status:

git config --global alias.st status

固然还有别的命令能够简写,不少人都用co表示checkout,ci表示commit,br表示branch:

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

配置输出log的优质显示

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"

配置Git的时候,加上--global是针对当前用户起做用的,若是不加,那只针对当前的仓库起做用。
配置文件放哪了?每一个仓库的Git配置文件都放在.git/config文件中:

$ cat .git/config 
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[remote "origin"]
    url = git@github.com:michaelliao/learngit.git    
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[alias]
    last = log -1

别名就在[alias]后面,要删除别名,直接把对应的行删掉便可。

此文章参考:廖雪峰老师的git教程,欢迎你们前往查看

相关文章
相关标签/搜索