美文网首页
Git 学习之路

Git 学习之路

作者: 楼上那位 | 来源:发表于2016-05-25 20:38 被阅读93次
    290760-e8491f69473bf200.jpg

    目录

    • clone
    • add
    • commit
    • checkout
    • pull
    • push
    • branch
    • reset
    • diff
    • log
    • status
    • tag
    • rebase
    • cherry
    • stash
    • config
    • revert
    • reflog
    远程仓库操作

    检出仓库:$ 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]

    分支操作

    • 提交本地分支到远程分支
      如果想把本地的某个分支test提交到远程仓库,并作为远程仓库的master分支,或者作为另外一个名叫test的分支,如下:
      $ git push origin test:master // 提交本地test分支作为远程的master分支
      $ git push origin test:test // 提交本地test分支作为远程的test分支
    • 删除远程分支:
      git push origin :branch-name
      冒号前面的空格不能少,原理是把一个空分支push到server上,相当于删除该分支。

    分支(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,删除它。用一个空的去更新它,就相当于删除了)

    相关文章

      网友评论

          本文标题:Git 学习之路

          本文链接:https://www.haomeiwen.com/subject/vdvtdttx.html