初始化配置
- git config - -global user.name “Your Name”
- git config - -global user.email “email@example.com”
创建仓库后在根目录初始化
- git init
添加文件
- git add filename.txt
- git commit -m “描述”
查看提交历史
- git log
- git log - -pretty=oneline
查看分支合并情况
- git log - -graph
- git log - -graph - -pretty=oneline –abbrev-commit
查看命令历史
- git reflog
查看状态
- git status
比较和当前版本库的不同
- git diff readme.txt
- git diff HEAD - - readme.txt
退回版本
- git reset - -hard 1094a |git reset –hard HEAD^
查看工作区和版本库里面最新版本的区别
- git diff HEAD - - readme.txt
可以丢弃工作区的修改
- git checkout - - file
小结
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout - - file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD ,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
和GitHub建立链接
创建SSH Key:
- ssh-keygen -t rsa -C “youremail@example.com”
SSH 密钥存储在其 ~/.ssh 目录 找到 id_dsa.pub复制内容到 在GitHub setting中新建的ssh链接,这样就能连接到你的GitHub
与本地仓库关联
- git remote add origin git@github.com:username/xx.git
- git push -u origin master #推送到主分支
- git push origin
上面命令表示,将当前分支推送到origin主机的对应分支。
如果当前分支只有一个追踪分支,那么主机名都可以省略。
git push 如果当前分支与多个主机存在追踪关系,那么这个时候-u选项会指定一个默认主机,这样后面就可以不加任何参数使用git push。
git push -u origin master 上面命令将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。
不带任何参数的git push,默认只推送当前分支,这叫做simple方式。此外,还有一种matching方式,会推送所有有对应的远程分支的本地分支。Git 2.0版本之前,默认采用matching方法,现在改为默认采用simple方式。
从远程克隆仓库
- git clone https://github.com/username/xx.git
创建分支:
创建并切换到一个名为dev的分支:
- git checkout -b dev
git checkout命令加上-b参数表示创建并切换
相当于以下两条命令:
- git branch dev
- git checkout dev
然后,用git branch命令查看当前分支:
- git branch
- *dev
master
git branch命令会列出所有分支,当前分支前面会标一个*号。
然后,我们就可以在dev分支上正常提交
Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch name
切换分支:git checkout name
创建+切换分支:git checkout -b name
合并某分支到当前分支:git merge name
删除分支:git branch -d name
分支管理:
合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
- git merge - -no-ff -m “merge with no-ff” dev
推送分支
推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:
$ git push origin master
如果要推送其他分支,比如dev,就改成:
$ git push origin dev
如果是:需先删除原来的远程库关联,重新建立ssh模式的远程库关联
git remote rm origin
git remote add origin git@github.com:?????/????
多人协作的工作模式通常是这样:
首先,可以试图用git push origin branch-name推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin 推送就能成功!
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch –set-upstream-to origin/。
这就是多人协作的工作模式,一旦熟悉了,就非常简单。
查看远程库信息,使用git remote -v;
本地新建的分支如果不推送到远程,对其他人就是不可见的;
从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
建立本地分支和远程分支的关联,使用git branch –set-upstream branch-name origin/branch-name;
从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
保存当前工作场景
有时候当前的工作未完成需要切换到其他分支修改bug之类的情况 又不想单独提交一次 这时候就可以使用git stash,使用后即可切换到其他分支工作 完成后还可以回来恢复上次保存的工作场景
- git stash 存储当前工作现场
- git stash list 列出存储过的现场列表
恢复上次保存的工作场景
git stash apply stashid
恢复后,stash内容并不删除,你需要用git stash drop来删除;git stash pop stashid,恢复的同时把stash内容也删了
创建标签
git tag tagname用于新建一个标签,默认为HEAD,也可以指定一个commit id;
git tag -a tagname -m “blablabla…”可以指定标签信息;
git tag可以查看所有标签。
删除标签
- git tag -d v0.1
如果要推送某个标签到远程,使用命令git push origin tagname
或者,一次性推送全部尚未推送到远程的本地标签:
- git push origin –tags
如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:
git tag -d v0.9
Deleted tag ‘v0.9’ (was f52c633)
然后,从远程删除。删除命令也是push,但是格式如下:git push origin :refs/tags/v0.9
git push origin tagname可以推送一个本地标签;
git push origin –tags可以推送全部未推送过的本地标签;
git tag -d tagname可以删除一个本地标签;
git push origin :refs/tags/可以删除一个远程标签。
设置颜色:
- git config –global color.ui true
不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore
忽略文件的原则是:
忽略操作系统自动生成的文件,比如缩略图等;
忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
- git config –global alias.st status 设置别名简化操作