1、创建与修改用户名和邮箱地址:
$ git config --global user.name "username"
$ git config --global user.email "email"
2、查看用户名和邮箱地址:
$ git config user.name
$ git config user.email
3、显示当前目录
$ pwd
4、把当前目录变成Git可以管理的仓库
$git init
5、Git添加文件需要add、commit一共两步
例子:
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."
$ git add . (添加所有修改)
如果文件只是修改没有新添加的可直接通过参数 $ git commit -a -m "注释····" 来提交
6、让我们时刻掌握仓库当前的状态
$ git status
7、Git告诉我们readme.txt被修改了,但如果能看看具体修改了什么内容,自然是很好的。比如你休假两周从国外回来,第一天上班时,已经记不清上次怎么修改的readme.txt,所以,需要用git diff这个命令看看:
$ git diff readme.txt
8、git log命令显示从最近到最远的提交日志
$ git log
退出按英文健Q;
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:
$ git log --pretty=oneline
10、在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支;
HEAD严格来说不是指向提交,HEAD指向的就是当前分支。
11、回退到上一个版本
$ git reset --hard HEAD^
回到指定commit id的版本
$ git reset --hard 1094a //1094a id前几位
12、查看文件
$ cat <file>
13、查看历史命令
$ git reflog
14、概念:理解工作区与暂存区,git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支;
Git跟踪并管理的是修改,而非文件,每次修改,如果不用git add到暂存区,那就不会加入到commit中
15、用git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别:
16、git checkout -- file 可以丢弃工作区的修改:
$ git checkout -- readme.txt
命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
$ git checkout . 撤销对工作区所做的一切更改,这样以前所有的修改就都没有,慎用!
17、用命令git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区:
$ git reset HEAD readme.txt
$ git reset HEAD . 撤销了前面所做的所有的add操作
18、删除文件git rm <file>
$ git rm test.txt
现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit:
另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:$ git checkout -- test.txt
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
19、添加远程库
$ git remote add origin git@github.com:yangzishan/mydoc.git
20、git查看远程仓库信息
$ git remote -v
21、把本地库的所有内容推送到远程库上
$ git push -u origin master
由于远程库是空的,我们第一次推送master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master
推送最新修改;
22、从远程库克隆
$ git clone git@github.com:yangzishan/mydoc.git
Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。
23、创建分支dev,然后切换到dev分支
$ git checkout -b dev
git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
$ git branch dev (创建分支)
$ git checkout dev (切换分支)
24、查看分支
$ git branch
git branch命令会列出所有分支,当前分支前面会标一个*号。
$ git branch -a //查看远程分支
25、合并分支
$ git merge dev
git merge命令用于合并指定分支到当前分支
26、删除dev分支
$ git branch -d dev
27、因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master
分支上工作效果是一样的,但过程更安全。
28、查看编辑 $ vi
29、解决合并分支冲突:
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
30、看到分支合并图
$ git log --graph
31、合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。如果要强制禁用Fast forward
模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
例:准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward
$ git merge --no-ff -m "merge with no-ff" dev
因为本次合并要创建一个新的commit,所以加上-m
参数,把commit描述写进去。
32、储藏当前分支的工作 stash功能
$ git stash
查看用 $git stash list
工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
一是用$ git stash apply恢复,但是恢复后,stash内容并不删除,你需要用$ git stash drop来删除;
另一种方式是用$ git stash pop,恢复的同时把stash内容也删了:
33、如果要丢弃一个没有被合并过的分支,可以通过 $ git branch -D <name>强行删除。
34、推送分支
$ git push origin branch-name
35、创建远程origin
的dev
分支到本地
$ git checkout -b dev origin/dev
在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
36、从远程抓取分支
$ git pull
建立本地分支和远程分支的关联,使用git branch --set-upstream-to origin/branch-name;
37、创建标签
首先,切换到需要打标签的分支上:然后就可以打一个新标签:
$ git tag v1.0
查看所有标签:
$ git tag
默认标签是打在最新提交的commit上的,如果忘了打标签,比如,现在已经是周五了,但应该在周一打的标签没有打,怎么办?
方法是找到历史提交的commit id,然后打上就可以了:$ git tag v0.9 f05fsdf3
查看标签信息
$ git show <tagName>
还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字:
$ git tag -a v1.0 -m "version 1.0" <commitid>
删除本地库标签
$ git tag -d v1.0
推送标签到远程
$ git push origin <tagname>
一次向推送尚未推送到远程的本地标签
$ git push origin --tags
删除远程标签: 先从本地删除,然后
$ git push origin :refs/tags/<tagname>
38、删除已有的远程库:
$ git remote rm origin
39、一个本地库可以关联多个远程库,只要远程库的名字不一样即可
40、配置,让Git显示颜色,会让命令输出看起来更醒目:
$ git config --global color.ui true
41、忽略某些文件时,需要编写.gitignore;
在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件;
使用Windows的童鞋注意了,如果你在资源管理器里新建一个.gitignore文件,它会非常弱智地提示你必须输入文件名,但是在文本编辑器里“保存”或者“另存为”就可以把文件保存为.gitignore了。
.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!
42、配置别名;比如用st代替status
$ git config --global alias. st status
--global参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用。
43 、生成 创建SSH Key
$ ssh-keygen -t rsa -C "youremail@example.com"