标签:
初始化
一个目录
git init
添加本地修改的文件
git add .
其中.表示添加当前目录下面所有修改&新增的文件,如果想单独add指定目录或文件将.替换成目录或文件地址就可以了
提交更新
git commit -m ‘注释‘
这里的提交是提交到了本地仓库.
删除文件
git rm file/dir
直接使用shell进行
rm file
操作后版本还需要使用git rm file
命令从版本库从删除文件,其中如果是删除目录,需要增加一个-r参数
查看提交历史
git log
git log
命令能查看所有版本的提交历史以及每次提交的版本号和注释,并且每次提交都会有一个唯一的版本号。
使用git log --graph
能够以’图’的方式更形象的展示提交记录,如果像显示的简洁一点,可以再加一个 –oneline 参数,就能把每一个提交合并到一行显示
HEAD
HEAD是git中一个特殊的指针,指向当前的分支的最新的一个commit,这个概念很重要。 HEAD^表示当前分支的上一个commit版本, HEAD^^表示上上个版本,也可以用HEAD~n进行表示,n代表之前第几个版本
git reset --hard HEAD
恢复到上次提交后的版本。git reset --hard HEAD^^
git reset --hard COMMIT_VERSION.
,COMMIT_VERSION表示版本号使用
git rest
命令会退版本后再使用git log
命令查看提交记录时发现当前版本之后的记录都没有了。如果此时又想恢复到当前版本之后的一个版本,可以用git reflog
查看git的每次操作记录,从里面找到版本好,然后重新使用git reset
命令就可以进行恢复了
暂存区
也可以称为’工作目录/working directory’上一次提交后的所有更改都被保存在’暂存区’,可以通过
git status
命令查看当前暂存区中所有的更改,当使用git add/rm 等命令操作时,实际上是对暂存区的操作,当使用git commit
命令时,会将暂存区的内容一次性提交到当前分支。
比对文件 git diff
git diff file
可以通过
git diff
查看一个文件与当前HEAD版本中这个文件内容的区别。
也可以通过git diff COMMIT_VERSION
比对某个版本与当前暂存区文件内容的区别,如果不指定COMMIT_VERSION,默认为HEAD
也可以通过git diff COMMIT_VERSION file
比对指定文件某个版本与当前展存区的区别
还可以通过git diff COMMIT_VERSION_1 COMMIT_VERSION_2
比较两个版本之前的区别。同样在后面可以再加一个文件路径,查看指定文件之前的区别
撤销修改
git checkout -- file
注意,一定要使用 – ,如果不使用 – 就代表切换分支
如果在commit之前想要对某个文件进行修改,如果该文件还没被add操作,可以使用git ckeckout -- file
命令将文件内容撤销到上一次提交后的内容,也就是HEAD版本的内容,。 如果该文件已经被add了,直接使用checkout,文件回会退到add时的内容,如果连上次add时的内容也需要撤销,可以先使用git reset file
命令将文件从暂存区中撤销,此时文件就会回到add前的状态,然后再使checkout进行撤销操作。使用reset命令对暂存区文件进行操作时,会将暂存区文件移除暂存区,而不是会退版本
恢复被删除的文件
git checkout -- file
注意,一定要 – 否则checkout就代表切换分支了。 使用该方法恢复文件的前提是被删除的文件只是本地rm或commit之前,如果文件已经提交了,那么就需要使用
git reset
命令进行恢复了。
添加一个远程仓库
git remote add origin remoteRespPath
其中origin是随便定义的,是给远程仓库取个别名,remoteRespPath是远程仓库的地址,可以添加多个远程仓库,保证给远程仓库取的别名不同就可以了
查看远程仓库信息
查看原创仓库名称列表 git remote
查看原创仓库详细信息 git remote -v
push代码到远程仓库
git push remoteRespName localBranch:remoteBranch
eg: git push origin master:master
其中origin为之前添加远程仓库时取的别名,localBranch为本地分支的名称,remoteBranch为远程仓库分支的名称,
git push origin master:master
会将本地仓库的master分支push到远程仓库origin的master分支上面去
每次push前最好先pull一下。如果有简单冲突会自动合并,如果有严重冲突,解决冲突后再push,如果其他人在上次pull之后又push了内容上去,那么你这次push将会报错。
从远程仓库push代码到本地仓库
git pull remoteRespName branch
eg: git pull origin master
其中remoteRespName表示仓库别名,branch是分支名称,
git pull origin master
会将远程仓库origin的master分支代码pull到本地
clone
git clone remoteResp
remoteResp代表远程仓库的地址,除了在本地初始化一个工程,然后push到远程仓库,也可以通过
git clone
命令从远程仓库clone一个已存在的工程到本地,当从远程仓库clone工程到本地后,默认在master分支上,并会自动的加上一个名为origin的远程仓库,地址就是clone时远程仓库的地址。
默认只会从远程仓库clone下master分支,如果要切换到其他分支,可以在clone后再使用git checkout -b newBranchName origin/newBranchName
命令将远程某个分支也checkout下来。
除了直接将远程分支checkout下来,也可以先在本地创建一个分支git checkout -b branch01
,建立好了之后,此时进行pull操作会报错,因为该本地分支还没有关联一个远程仓库的分支,接下来使用git branch --set-upstream-to=origin/branch01 branch01
就能够讲本地创建的branch01分支与远程仓库origin下面的branch01分支进行关联起来了,此时就可以进行pull操作了。
创建分支
git branch newBranchName
eg : git branch laibao
上面的命令将会创建一个laibao的分支,创建分支后,你目前还是在当前分支,如果要切换到新分支可以用切换分支命令
切换分支
git checkout branchName
eg : git checkout laibao
上面的命令将会切换到laibao分支上面,接下来可以在新分支上面修改内容,然后本地commit,然后可以通过
git push origin laibao:laibao
命令将本地laibao分支push到远程仓库中对于上面两个命令其实可以用一个命令代替
git checkout -b newBranchName
,表示创建新分支,并切换到这个分支上面
删除分支
git branch -d branchName
上面的命令时删除本地分支,如果该分支还没有被合并,git会提示合并失败,可以使用 -D参数强制删除分支
如果需要将原创仓库中的分支也删除掉可以用 git push remoteRespName --delete branchName
合并分支
比如要将b分支合并到a分支 <br/>
首先切换到a分支 git checkout a <br/>
然后合并 git merge b <br/>
还可以通过-m参数指定合并备注<br/>
就能完成合并操作了。 <br/>
如果合并冲突了,会提示合并冲突,接下来打开冲突的文件,解决冲突,然后commit。就合并完成了。<br/>
合并分支时一般加上 --no-ff参数,表示不使用 Fast Forward模式,如果不加这个参数,默认使用的就是Fast Forward模式,导致合并后删除原来的分支后,看不出主分支曾经合并过
存档
存档
git stash
查看存档列表
git stash list
恢复存档
git stash apply 存档id
删除存档
git stash drop 存档id
上面的恢复和删除可以用下面的命令合并操作
git stash pop 存档id
当在当前分支工作了一段时间临时需要切换到其他分支,但是当前分支的内容都不能被提交,这个时候可以先使用命令
log stash
将当前工作目录进行存档,然后checkout到其他分支工作,最后再checkout回来当前分支,再使用log stash list
命令查看存档列表,接着使用log stash pop 存档id
就能接着之前的内容进行开发了。
如果上面不先存档,也不提交,直接checkout到其他分支,会有问题,要么冲突,要么将当前修改的内容一并带到checkout后的分支了。
忽略指定文件/目录
可以在根目录下添加一个.gitignore文件,文件里面指定要忽略的文件和目录
如:
.idea/*
target
.settings/*
.classpath
.project
.DS_Store
logs
Makefile
*.iml
*/log/*
*.dat
别名 alias
如果某些命令太长了,写起来很麻烦,可以给某些操作起别名,比如
git commit
可以用git ci
代替就更好了,那么可以为commit设置别名,设置方法为git config --global alias.ci "commit"
,那么以后就都可以使用git ci
代替git commit
了, 如果加了–global表示对当前用户有效,配置的别名保存在~/.gitconfig文件中,如果没加–global参数,则只对当前仓库有效,保存在./.git/config文件中。可以直接编辑配置文件添加别名。
添加一些有用的别名:
git config --global alias.unstage ‘reset HEAD‘
// "git unstage xx.txt" 相当于 "git reset HEAD xx.txt" 命令
git config --global alias.ci ‘commit‘
git config --global alias.br ‘branch‘
git config --global alias.co ‘checkout‘
git config --global alias.logx ‘log --color --graph --pretty=format:‘%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset‘ --abbrev-commit‘
//这个就牛x了,配置好了之后,可以是试试"git logx"命令
标签:
原文地址:http://blog.csdn.net/is_zhoufeng/article/details/51379015