Git 学习之路

2016-05-25  本文已影响93人  楼上那位
290760-e8491f69473bf200.jpg

目录

远程仓库操作

检出仓库:$ git clone git://github.com/jquery/jquery.git
查看远程仓库:$ git remote -v
添加远程仓库:$ git remote add [name] [url]
删除远程仓库:$ git remote rm [name]
修改远程仓库:$ git remote set-url --push [name] [newUrl]
拉取远程仓库:$ git pull [remoteName] [localBranchName]
推送远程仓库:$ git push [remoteName] [localBranchName]

分支操作

分支(branch)操作相关命令
查看本地分支:$ git branch
查看远程分支:$ git branch -r (如果还是看不到就先 git fetch origin 先)
创建本地分支:$ git branch [name] ----注意新分支创建后不会自动切换为当前分支
切换分支:$ git checkout [name]
创建新分支并立即切换到新分支:$ git checkout -b [name]
直接检出远程分支:$ git checkout -b [name] [remoteName] (如:git checkout -b myNewBranch origin/dragon)

git clone

git clone <repository> <directory>,将repository指向的版本库创建一个克隆到directory目录中。目录directory相当于克隆版本库的工作区,文件都会检出,版本库位于工作区下得.git目录中。
git clone --bare <repository> <directory.git>
git clone --mirror <repository> <directory.git>
上面的两种克隆版本都不包含工作区,直接就是版本库的内容,这样的版本库称为裸版本库。

git branch

git branch,显示当前所在的分支
git branch <branchname>,创建新的分支branchname
git branch -d <branchname> ,删除名称为branchname的分支

git checkout

git checkout branchname,会改变HEAD头指针,主要用于切换分支
git checkout -b branchname,用于创建一个新的分支,并且切换到创建的新的分支上
git checkout --filename,用暂存区中的filename文件来覆盖工作区中的filename文件
git checkout branch --filename,用版本库中的filename文件来覆盖暂存区和工作区中的filename文件
git checkout <commit> --filename,用指定提交中的文件覆盖暂存区和工作区中对应的文件
git checkout -- .或者git checkout .,用暂存区的所有文件直接覆盖本地文件,取消所有的本地的修改,是一条危险的操作

git rm

rm命令删除的文件只是在本地进行了删除,尚未添加到暂存区,也就是说,直接在工作区删除,对暂存区和版本库没有任何影响。
git rm命令会将删除动作加入暂存区,这是执行提交动作,就从真正意义上执行了文件删除

git reset

把当前分支指向另一个位置,并且有选择的变动工作目录和索引
git reset --hard <commit>,替换引用的指向,替换暂存区和工作区
git reset --soft <commit>,只更改引用的指向,不影响暂存区和工作区的内容,但是**将commitID之后的修改置为暂存区状态,版本库的内容变更为上个提交之前的内容**。撤销版本库的提交至暂存区git reset,用HEAD指向的目录树重置暂存区,不会影响工作区的内容,但是暂存区和版本库的内容就变更为commitID 之前的。撤销版本库和暂存区的提交至工作区,变为未提交状态`
git reset -- filename,将文件filename的改动撤出暂存区,暂存区其他文件不变,但不影响工作区。

git add

git add 在提交你修改的文件之前,你需要把它们添加到暂存区。如果该文件是新创建的,你可以执行将该文件添加到暂存区
git add . Git会递归地将你执行命令时所在的目录中的所有文件添加上去,所以如果你将当前的工作目录作为参数,它就会追踪那儿的所有文件
git add -u 使用-u参数调用了git add命令,会将本地有改动(包括删除和修改)的已经追踪的文件标记到暂存区中。
git add -A 使用-A参数会将添加所有改动的已跟踪文件和未跟踪文件。
git add -i,交互式的方式进行添加。

git status

git status,查看你的代码在缓存与当前工作目录的状态
git status -s,将结果以简短的形式输出

git diff

git diff <file> 比较当前文件和暂存区文件差异 git diff
git diff <id1><id2> 比较两次提交之间的差异
git diff <branch1> <branch2> # 在两个分支之间比较
git diff --staged 比较暂存区和版本库差异
git diff --cached 比较暂存区和版本库差异
git diff HEAD <file> 工作区和分支版本库
git diff --stat 仅仅比较统计信息

git cat-file

git cat-file -t 查看Git对象的类型,主要的git对象包括tree,commit,parent,和blob等。
git cat-file -p,查看Git对象的内容

git log

git log --oneline 可以显示更加短小的提交ID.
git log --graph 显示何时出现了分支和合并等信息.
git log --pretty=raw 显示提交对象的parent属性.

git config

git config <section>.<key>,读取和更改INI配置文件的内容。
git config <section>.<key> <value>,修改INI配置文件中某个配置的键值
在全局空间中添加新的用户
git config --global user.name "harvey liu"
git config --global user.email harvey_liu@163.com
设置git命令的别名
git config --global alias.ci commit
git config --global alias.co checkout
删除git全局配置文件中的用户名
git config --unset --global user.name
git config --unset --global user.email

git revert

撤销某次提交
git revert HEAD^ , HEAD之前的提交的反转提交,不会影响工作区,只是针对版本库

在clone完成之后,Git 会自动为你将此远程仓库命名为origin(origin只相当于一个别名,运行git remote –v或者查看.git/config可以看到origin的含义),并下载其中所有的数据,建立一个指向它的master 分支的指针,我们用(远程仓库名)/(分支名) 这样的形式表示远程分支,所以origin/master指向的是一个remote branch(从那个branch我们clone数据到本地),但你无法在本地更改其数据。

  1. **git branch -r **
    (to show remote branches git knows about)
    origin/HEAD -> origin/master
    origin/master
    可以发现origin/master是远程分支

$git diff origin/master master (show me the changes between the remote master branch and my master branch).

需要注意的是,remotes/origin/master和origin/master的指向是相同的

  1. git push origin master
    origin指定了你要push到哪个remote

master其实是一个“refspec”,正常的“refspec”的形式为”+<src>:<dst>”,冒号前表示local branch的名字,冒号后表示remote repository下 branch的名字。注意,如果你省略了<dst>,git就认为你想push到remote repository下和local branch相同名字的branch。比如:
**$git push origin master:master **
(在local repository中找到名字为master的branch,使用它去更新remote repository下名字为master的branch,如果remote repository下不存在名字是master的branch,那么新建一个)

$git push origin master (省略了<dst>,等价于“git push origin master:master”)

$git push origin master:refs/for/mybranch (在local repository中找到名字为master的branch,用他去更新remote repository下面名字为mybranch的branch)

**$git push origin HEAD:refs/for/mybranch **(HEAD指向当前工作的branch,master不一定指向当前工作的branch,所以我觉得用HEAD还比master好些)

**$git push origin :mybranch **(再origin repository里面查找mybranch,删除它。用一个空的去更新它,就相当于删除了)

上一篇下一篇

猜你喜欢

热点阅读