标签:git
一、查看计算机里有哪些Git版本,并选用你想使用的版本1 | which -a git //查看有哪些版本 |
配置.bash_profile文件,选择自己需要的版本
1 | vim .bash_profile |
加入需要制定环境相对路径
1 | export PATH="/user/local/git/bin:$SPAH" |
编辑好后,重新载入.bash_profile
1 | source .bash_profile |
配置用户名:
1 | git config -- global user.name jspang |
配置邮箱:
1 | git config --global user.email jspang@126.com |
三、Git配置的三个级别
1、system –针对于系统
2、global –针对于当前用户
3、local –针对于当前仓库
配置的优先级:local>global>system
四、如何查看Git文档
第一种方法:
1 | git config --help |
第二种方法:
1 | git help config |
五、重命名Git命令
1 2 3 4 | git config --global alias.co checkout git config --global alias.br branch git config --global alias.st status git cofnig --global alias.ci commit |
1 | e8bd40626e0af320b3c1bdf6154b44a59ed78039 |
1、blobs:每个blob代表一个(版本的)文件,blob只包含文件的数据,而忽略文件的其他元数据,如名字,路径格式等。
2、trees:每个tree代表了一个目录的信息,包含了此目录下的blobs,子目录(对应于子trees),文件名、路径等元数据。因此,对于有子目录的目录,git相当于存储了嵌套的trees。
3、commits:每个commmit记录了提交一个更新的所有元数据,如指向的tree,父commit,作者、提交者、提交日期、提交日志等。每次提交都指向一个tree对象,记录了档次提交时的目录信息。一个commit可以有多个(至少一个)父commits。
4、tags:tag用于给某个上述类型的对象指配一个便于开发者记忆的名字,通常用于某次commit。
基本对象关系图
1.git init:初始化一个Git仓库
1 | git init git_test |
这个命令创建了一个叫git_test 的仓库,并在你制定的目录下边建立了一个git_test文件夹。同时在文件夹中生成了.git。
1 | git init --bare git_bare_test |
生成一个裸的仓库,它不带.git文件,也就是不带工作区。
2.git clone:
1 | git clone https://github.com/shenghy/Scroll.git |
克隆一个已有的仓库,后边可以是URL也可以是本地路径。这个命令经常使用,在GitHub上看到别人好的开源项目,都可以clone下来进行一番研究了。
1.working directory:工作区
2.staging area:暂存区
3.history repository:历史仓库
Git工作区直接跟暂存区打交道暂存区跟版本库打交道。
从工作区中添加内容到暂存区。
将暂存区的内容提交到版本库。
从版本库中检出内容到工作区。
1.git add:主要用于把我们要提交的文件信息添加到暂存区中。
1 | git add -u |
把所有tracked文件中被修改过或已删除文件的信息添加到暂存区。它不会处理untracted的文件。
1 | git add -A |
表示把所有tracked文件中被修改过或已删除文件和所有untracted的文件信息添加到暂存区。
1 | git add -i |
查看所有修改过或已删除文件但没有提交的文件。
2.git commmit:把暂存区内容添加到版本仓库中。
1 | git commit -m "提交的描述信息" |
如果我们这里不用-m的参数的话,git将抵用Vim来让我们输入提交信息。
1 | git commit -a -m "提交的描述信息" |
我们一天可能更新了很多文档,但是我们忘记了它们的名字,此时我们将所做的全部更新添加到版本库中。
3.git status:查看工作区、暂存区和版本库的差异情况。
4.git rm:在git中我们可以通过git rm命令把一个文件删除,并把它从git的仓库管理系统中移除。但是最后要之心git commit 才真正提交到git仓库中。
1 2 | git rm a git commit -m "delete a file" |
删除暂存区中的啊文件,要用–cached参数
1 | git rm --cached a |
5.git mv:git文件重命名或移动路径时使用命令
把文件a 从新命名为c
1 | git mv a c |
其实git没有重命名或移动的操作,实际上Git是一系列操作的组合。
6.gitignore:把不需要跟踪的文件添加到这个文件中就可以避免跟踪了。在这个文件中可以使用通配符。
有些时候文件夹里没有这个文件,你可以自己手动建一个.gitignore文件。
1 | git branch test //新建test分支 |
创建了分支,我们并没有直接到这个分支上,而还是在个主分支上。我们需要用切换分支命令切换到新创建的test分支上。
1 | git branch |
不带参数,列出本地已经存在的分支,并且在当前分支前面会加“*”号标记。
1 | git branch -r //列出远程分支 |
1 | git branch -a //列出本地分支和远程分支 |
重命名分支,如果newbranch名字分支已经存在,则需要使用 -M强制重命名,否则,使用-m进行重命名。
1 | git branch -m | -M oldbranch newbranch |
删除branchname分支
1 | git branch -d | -D branchname |
删除远程 branchname分支
1 | git branch -d -r branchname |
git标签分为两种类型:轻量标签和附注标签。轻量标签是指向提交对象的引用,附注标签则是仓库中的一个独立对象。建议使用附注标签。
创建轻量标签
1 | git tag v0.1.2 -light |
创建附注标签
1 | git tag -a v0.1.2 -m "0.1.2版本" |
创建轻量标签不需要传递参数,直接制定标签名称即可。
创建附注标签时,参数a即annotated的缩写,制定标签类型,后附标签名。参数m指定标签说明,说明信息会保存在标签对象中。
在学习这个给分支起别名的操作前,我们要会使用一个查看Log日志的命令,用这个命令查出我们现在的Git情况,然后再给它起名。
查看版本历史示意图:
1 | git log --oneline --decorate --graph --all |
1 | git tag "v0" 51bcb0d |
当然我们查看历史版本示意图打的命令太长了,我们可以给这个命令起个别名:
1 | git config --global alias.lol "log --oneline --decorate --graph --all" |
以后及可以用git lol命令进行查看历史版本示意图了。
用Git命令起名为“v0”,并表示他的HS值。如果不制定Hash的话,会默认制定HEAD指定的Hash(也就是当前HS),一般我们只用5-7位的Hash。
1 | git checkout test //切换分支到test上 |
当我们在一个分支上作了修改,提交到了暂存区,但是没有提交到版本库中。这时我们要切换分支(比如切换到master分支 git checkout master),系统会报错,提示我们暂存区有文件没有提交。如果我们还不想提交文件,这时我们就可以使用下边的命令把暂存区的文件保存起来。
1 | git stash save -a "stash1" |
stash英文是藏匿的意思。当我们在其它分支工作完后,回到藏匿的分支后,如何恢复藏匿的内容那?
1)可以用命令先查看我们藏匿了什么东西。
1 | git stash list |
通过这个命令,会列出我们所藏匿东西的引用。
2)可以用如下命令进行还原藏匿的东西。
1 | git stash pop --index stash@{0} |
我们这时候用git status命令查看一下git状态,会发现我们藏匿的东西已经还原回去了。这条命令不仅恢复了藏匿的内容,并删除了藏匿区的内容,由多个动作组成。如果我们只想还原暂存区的藏匿内容,但并不删除藏匿区内容的话,可以使用下边这条命令。
1 | git stash apply --index stash@{0} |
我们用 git stash apply –index stash{0}命令恢复藏匿内容后,我们又想删除藏匿区内容时可以用下边这条命令。
1 | git stash drop stash@{0} |
如果我们不加stash@{0}引用的话,它会默认删除stash栈里最上边的那一个。如果我们有多个stash想清理的话,我们可以使用
1 | git stash clear |
进行清理。
合并分支有很多情况,有时还要处理冲突情况。这里今天不做过多介绍,只介绍一个最基本的语法。
1 | git merge branchName |
merge分两种
1)fast-farword merge
master分支衍生出来的
2)non-fast-farword merge
三方合并分支
1.git checkout:还原工作区
原来我们用git checkout 命令来切换分支,今天我们学习另一个用图,用它来还原我们的工作区。案例命令如下:
1 | git checkout --master.txt |
这个命令其实是用暂存区的内容覆盖工作区的内容。
2.git reset:还原暂存区
当我们把工作区的内容用 git add .提交到暂存区后,我们可以使用git Reset fileName 命令来还原暂存区的内容,实例命令如下:
1 | git reset master.txt |
输入此命令后,可以用git status 查看Git状态,发现已经没有差别了。
还原其他历史版本信息:
1 | git checkout INITIAL_COMMIT --master.txt |
INITIAL_COMMIT是一个版本的引用。
1 | git checkout HEAD --master.txt |
3.git clean:清楚没有跟踪的文件
查看我们没有跟踪和可移除的工作区内容,也就是将要被删除的内容。
1 | git clean -n |
查看后我们可以下边的命令删除内容
1 | git clean -f |
用git clean 命令查看将要被移除.gitignore指定的不提交文件,命令如下:
1 | git clean -n -x |
用git clean -X -f 密令删除.gitignore,注意这里的X是大写的X
1 | git clean -X -f |
4.git revert:产生新的提交,覆盖以前的提交
1 | git revert HEAD |
1 | git clone https://github.com/shy-test/test.git |
通过这个命令我们已经把远程仓库克隆到我们本地来了。使用这个命令只要到工作目录,不需要再创建仓库目录,仓库目录会自己被克隆下来。
先进入本地仓库目录,然后用git fetch命令来获取远端仓库的所有内容。相当于是从远程获取最新版本到本地,不会自动merge。
1 2 3 | Git fetch origin master git log -p master..origin/master git merge origin/master |
以上命令的含义:
首先从远程的origin的master主分支下载最新的版本到origin/master分支上,然后比较本地的master分支和origin/master分支的差别,最后进行合并。
上述过程其实可以用以下更清晰的方式来进行:
1 2 3 | git fetch origin master:tmp git diff tmp git merge tmp |
从远端获取最新的版本到本地的tmp分支上,之后进行比较合并。
1 | git pull origin master |
上述命令其实相当于git fetch 和git merge,在实际使用中,git fetch更安全一些,因为在merge前,我们可以查看更新情况,然后再决定是否合并。
1 | git push <远程主机名> <本地分支名>:<远程分支名> |
注意,分支推送顺序的写法是<来源地>:<目的地>,所以git pull是<远程分支>:<本地分支>,而git push 是<本地分支>:<远程分支>.
如果省略本地分支名,则表示将本地分支推送与之存在“追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。
1 | git push orgin master |
上面命令表示,将本地分master分支推送到origin筑基的master分支。如果后者不存在,则会被新建。
如果省略本地分支名,则表示删除指定远程分支,因为这等同于推送一个空的本地分支到远程分支。
1 2 3 | git push origin : master //等同于 git push origin ---delete master |
上面命令表示删除origin主机的master分支。
如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。
1 | git push origin |
上面命令表示,将当前分支推送到origin主机的对应分支。
如果当前分支只是一个追踪分支,那么主机名都可以省略。
1 | git push |
如果我们想要推送一个tag的话,可以使用下边的命令:
1 | git push --tags |
用push删除远程分支:
1 | git push --delete origin feacher |
标签:git
原文地址:http://blog.51cto.com/13507333/2086767