zoukankan      html  css  js  c++  java
  • 实践中的Git常用指令分析

    从工作开始,一直都在使用为知笔记(作为程序员需要知道的内容很多---不需要很深入理解,一段时不使用的东西可能就会忘记)。但本周一同步不同PC端时,了解到为知会在2017/1/1开始收费!

    既然收费了,咱就不用了;但同步功能真得很好用。看看自己平日里做的笔记,恰好给自己一个写作的机会(那就把它们整理一下,发表到博客园上吧)。

    “好记性不如烂笔头嘛!”是James一直坚信的理念。希望你也如此!(下述图片为转载)

    之前的博客《Git--常用场景解析》,说道了一下安装和基本常识;本篇说说更加深入一点的内容,包括:

    1. 如何获取Git平台的所有可用指令,以及对特定Command的帮助文档;

    2. Git的add指令分析;

    3. Git的commit指令分析;

    4. Git的rm指令分析;

    5. Git的mv指令分析;

    6. Git的show指令分析;

    7. Git的diff指令分析;

    8. Git的push指令分析;

    9. Git的init指令分析;

    10. Git的clone指令分析。

    主题1:Git平台的帮助文档

    如果想知道Git到底有多大,那就应该知道Git平台到底有多少可用指令。

    james@james-PC MINGW64 /d/GitDemo/remoteGit (BARE:master)
    $ git
    
    usage: git [--version] [--help] [-C <path>] [-c name=value]
               [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
               [-p | --paginate | --no-pager] [--no-replace-objects] [--bare]
               [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
               <command> [<args>]
    These are common Git commands used in various situations:
    start a working area (see also: git help tutorial)
       clone      Clone a repository into a new directory
       init       Create an empty Git repository or reinitialize an existing one
    work on the current change (see also: git help everyday)
       add        Add file contents to the index
       mv         Move or rename a file, a directory, or a symlink
       reset      Reset current HEAD to the specified state
       rm         Remove files from the working tree and from the index
    examine the history and state (see also: git help revisions)
       bisect     Use binary search to find the commit that introduced a bug
       grep       Print lines matching a pattern
       log        Show commit logs
       show       Show various types of objects
       status     Show the working tree status
    grow, mark and tweak your common history
       branch     List, create, or delete branches
       checkout   Switch branches or restore working tree files
       commit     Record changes to the repository
       diff       Show changes between commits, commit and working tree, etc
       merge      Join two or more development histories together
       rebase     Reapply commits on top of another base tip
       tag        Create, list, delete or verify a tag object signed with GPG
    collaborate (see also: git help workflows)
       fetch      Download objects and refs from another repository
       pull       Fetch from and integrate with another repository or a local branch
       push       Update remote refs along with associated objects
    
    'git help -a' and 'git help -g' list available subcommands and some
    concept guides. See 'git help <command>' or 'git help <concept>'
    to read about a specific subcommand or concept.

    上述git指令给出的结果,对Git平台上涉及到的指令进行了分类,并给出了指令格式:—command –args。想要知道Git平台的所有指令,还需要执行以下指令:

    james@james-PC MINGW64 /d/GitDemo/remoteGit (BARE:master)
    $ git help --all
    
    usage: git [--version] [--help] [-C <path>] [-c name=value]
               [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
               [-p | --paginate | --no-pager] [--no-replace-objects] [--bare]
               [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
               <command> [<args>]
    
    available git commands in 'C:Program FilesGitmingw64/libexec/git-core'
    
      add                 fsck-objects        rebase--helper
      add--interactive    gc                  receive-pack
      am                  get-tar-commit-id   reflog
      annotate            grep                relink
      apply               gui                 remote
      archimport          gui--askpass        remote-ext
      archive             gui--askyesno       remote-fd
      askpass             gui.tcl             remote-ftp
      bisect              hash-object         remote-ftps
      bisect--helper      help                remote-http
      blame               http-backend        remote-https
      branch              http-fetch          repack
      bundle              http-push           replace
      cat-file            imap-send           request-pull
      check-attr          index-pack          rerere
      check-ignore        init                reset
      check-mailmap       init-db             rev-list
      check-ref-format    instaweb            rev-parse
      checkout            interpret-trailers  revert
      checkout-index      log                 rm
      cherry              ls-files            send-email
      cherry-pick         ls-remote           send-pack
      citool              ls-tree             sh-i18n--envsubst
      clean               mailinfo            shortlog
      clone               mailsplit           show
      column              merge               show-branch
      commit              merge-base          show-index
      commit-tree         merge-file          show-ref
      config              merge-index         stage
      count-objects       merge-octopus       stash
      credential          merge-one-file      status
      credential-manager  merge-ours          stripspace
      credential-store    merge-recursive     submodule
      credential-wincred  merge-resolve       submodule--helper
      cvsexportcommit     merge-subtree       subtree
      cvsimport           merge-tree          svn
      cvsserver           mergetool           symbolic-ref
      daemon              mktag               tag
      describe            mktree              unpack-file
      diff                mv                  unpack-objects
      diff-files          name-rev            update-index
      diff-index          notes               update-ref
      diff-tree           p4                  update-server-info
      difftool            pack-objects        upload-archive
      difftool--helper    pack-redundant      upload-pack
      fast-export         pack-refs           var
      fast-import         patch-id            verify-commit
      fetch               prune               verify-pack
      fetch-pack          prune-packed        verify-tag
      filter-branch       pull                web--browse
      fmt-merge-msg       push                whatchanged
      for-each-ref        quiltimport         worktree
      format-patch        read-tree           write-tree
      fsck                rebase
    
    git commands available from elsewhere on your $PATH
      flow
    'git help -a' and 'git help -g' list available subcommands and some
    concept guides. See 'git help <command>' or 'git help <concept>'
    to read about a specific subcommand or concept.

    通过上述结果,可想而知:Git是如此庞大。

    若想要知道某个具体command的含义,只需要执行:git help <command>。

    主题2:git add指令

    Git显式地将本地代码分为三个层级,或者本地目录下的文件分为三个状态。对于最后一种说法,Git分为的三个状态分别是:工作区,暂存区和版本区(最终修改提交的位置)。

    使用:git add <file> 或者 git add .,将文件加入暂存区中。

    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ git status
    On branch master
    Initial commit
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
            index.html
    nothing added to commit but untracked files present (use "git add" to track)
    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ git add .
    warning: LF will be replaced by CRLF in index.html.
    The file will have its original line endings in your working directory.

    对于新建的一个文件,Git会提示文件状态为:Untracked files,并提示对应可用的指令:git add <file>...

    此时执行:git status可查看文件状态的改变:

    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ git status
    On branch master
    Initial commit
    Changes to be committed:
      (use "git rm --cached <file>..." to unstage)
            new file:   index.html

    使用add指令后,文件状态发生了改变:Changes to be committed(可被commit的状态)

    根据提示,使用下述指令可以将文件从暂存区移除:

    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ git rm --cached index.html
    rm 'index.html'
    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ git status
    On branch master
    Initial commit
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
            index.html
    nothing added to commit but untracked files present (use "git add" to track)


    使用rm指令,文件状态回到了Untracked状态(状态做了翻转)。

    主题3:git commit指令

    提交新文件new file(已存在于暂存区中)到代码仓库,可以执行以下指令:

    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ git status
    On branch master
    Initial commit
    Changes to be committed:
      (use "git rm --cached <file>..." to unstage)
            new file:   index.html
    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ git commit -m "Initial contents of public_html"
    [master (root-commit) dc785f6] Initial contents of public_html
     1 file changed, 1 insertion(+)
     create mode 100644 index.html


    执行了:git commit ...指令后就是将暂存区中的代码提交到了代码仓库中。

    git log...可以查看历次提交commit内容:

    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ git log
    commit dc785f69abdcb1b2897d5a76bf38562186029e39
    Author: ZHANGEfeng-james <zfengwust3054@163.com>
    Date:   Sat Dec 3 10:14:26 2016 +0800
        Initial contents of public_html


    再次修改该文件(前提是:仓库中已经有该文件),代码仓库已知晓该文件:

    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ cat index.html
    <html>
    <body>
    My websit is alive!
    </body>
    </html>
    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ git status
    On branch master
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
            modified:   index.html
    no changes added to commit (use "git add" and/or "git commit -a")


    git status状态指出,文件已修改(但对于Commit而言,本次修改没有被暂存:Changes not staged for commit)

    再次提交时,直接给出已修改文件的文件名,否则达不到提交的效果:

    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ git commit index.html
    [master 4b6d0b2] Convert to HTML
     1 file changed, 4 insertions(+)
    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ git log
    commit 4b6d0b2a8b3268f9515eec522c4725980fe2feed
    Author: ZHANGEfeng-james <zfengwust3054@163.com>
    Date:   Sat Dec 3 10:30:14 2016 +0800
        Convert to HTML
    commit dc785f69abdcb1b2897d5a76bf38562186029e39
    Author: ZHANGEfeng-james <zfengwust3054@163.com>
    Date:   Sat Dec 3 10:14:26 2016 +0800
        Initial contents of public_html

    在上述执行了:git commit index.html时,会跳转到vim界面并编辑commit的log message。本次提交直接将工作目录的修改提交到了代码仓库,中间跳过了Staged状态。

    git commit -m "descr..." 默认将 index 中的所有改动(如果workspace中的改动提交给了index,即执行了 git add 操作,但忽略那些没有提交的改动)提交到local respository中。

    git commit -a -m "modify: all file" 执行结果:提交了对所有结果的改动,直接影响到了所有文件(是对所有已存在于index区域的文件改动有效,对未存在于index的文件无效,不管有没有执行 git add <modify>...)。

    git commit -m "descr..." <file>... 将index中的指定文件的改动提交到local respository中(此时在workspace中的该文件必须是提交给index,若是未提交给index的文件,将会找不到)。

    git commit --amend 对最新提交进行修改(对最近一次提交进行修改),重写commit信息,而不会产生另外的新提交;git commit -m "commit lg" --amend:重写最近一次提交说明,不进入vim界面。

    对于git commit指令不推荐使用参数 -a,否则,将会丢失对提交内容进行控制的能力。

    主题4:git rm指令

    Git中提到的rm指令,实际是:remove,移除或去除。

    删除仓库中本身存在的文件,使用一次提交即可实现:

    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ git rm poem.html
    rm 'poem.html'
    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ git status
    On branch master
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
            deleted:    poem.html
    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ git commit -m "Remove poem.html"
    [master 4481246] Remove poem.html
     1 file changed, 1 deletion(-)
     delete mode 100644 poem.html

    使用:git rm ...指令实现删除文件操作。git rm ..实际上执行了两个步骤:1.删除文件;2.将删除文件这一改动添加到暂存区中。

    遍历目录内容:

    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ ls -al
    total 9
    drwxr-xr-x 1 james 197121  0 十二  3 20:51 ./
    drwxr-xr-x 1 james 197121  0 十二  3 09:41 ../
    drwxr-xr-x 1 james 197121  0 十二  3 20:51 .git/
    -rw-r--r-- 1 james 197121 49 十二  3 10:26 index.html

    主题5:git mv指令

    重命名Git仓库中的文件有两种手法,前者为后者指令的分解操作。

    git-mv - Move or rename a file, a directory, or a symlink.

    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ mv test.txt testOtherName.txt
    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ ls
    index.html  testOtherName.txt
    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ git status
    On branch master
    Changes not staged for commit:
      (use "git add/rm <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
            deleted:    test.txt
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
            testOtherName.txt
    no changes added to commit (use "git add" and/or "git commit -a")

    步骤1:mv指令将源文件重命名为后者;Git当前的状态显示:已将源文件删除,另增加了未存在于仓库的新文件。

    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ git rm test.txt
    rm 'test.txt'
    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ git status
    On branch master
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
            deleted:    test.txt
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
            testOtherName.txt

    步骤2:执行git rm ...或者git add ...将删除的文件修改添加到暂存区中。Git当前状态显示:源文件已删除,其改动已存在于暂存区中;但新生成了一个新文件,且没有没有存放到暂存区。

    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ git add .
    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ git status
    On branch master
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
            renamed:    test.txt -> testOtherName.txt

    步骤3:将未添加到仓库的新文件加入暂存区中.

    上述Changes to be committed显示:实际是在执行文件重名。

    使用Git上的一个复合指令如下:

    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ git mv testOtherName.txt test.txt
    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ git status
    On branch master
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
            renamed:    testOtherName.txt -> test.txt

    下一步,将上述改动提交到代码仓库即可:

    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ git commit -m "testOtherName to test"
    [master 8bac1e8] testOtherName to test
     1 file changed, 0 insertions(+), 0 deletions(-)
     rename testOtherName.txt => test.txt (100%)

    主题6:git show指令

    很多时候想查看某次commit的内容,或者是文件中的修改内容。

    使用:git show ...指令即可;同时需要使用特定提交的commitID作为其参数。

    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ git show 4b6d0b
    commit 4b6d0b2a8b3268f9515eec522c4725980fe2feed
    Author: ZHANGEfeng-james <zfengwust3054@163.com>
    Date:   Sat Dec 3 10:30:14 2016 +0800
        Convert to HTML
    diff --git a/index.html b/index.html
    index 9aefa39..a698d54 100644
    --- a/index.html
    +++ b/index.html
    @@ -1 +1,5 @@
    +<html>
    +<body>
     My websit is alive!
    +</body>
    +</html>
     No newline at end of file

    其中参数指明的是某个指定的commit:“commit 4b6d0b2a8b3268f9515eec522c4725980fe2feed”。

    另外一种方式:git show-branch ...以简洁的方式查看当前分支的提交描述。

    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ git show-branch --more=10
    [master] Convert to HTML
    [master^] Initial contents of public_html

    参数:--more=10指明的是最近的10次提交内容。

    主题7:git diff指令

    比较两次commitID或者commit的不同:

    执行:git diff ...

    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ git diff master master^
    diff --git a/index.html b/index.html
    index a698d54..9aefa39 100644
    --- a/index.html
    +++ b/index.html
    @@ -1,5 +1 @@
    -<html>
    -<body>
     My websit is alive!
    -</body>
    -</html>
     No newline at end of file
    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ git diff master^ master
    diff --git a/index.html b/index.html
    index 9aefa39..a698d54 100644
    --- a/index.html
    +++ b/index.html
    @@ -1 +1,5 @@
    +<html>
    +<body>
     My websit is alive!
    +</body>
    +</html>
     No newline at end of file

    其中:master代表的是最近的一次commit,master^代表的上一次提交。可以看出:参数位置的不同,也就是基准的不同,得到的比较结果也不同。

    另外一种方式,同样指明commitID号:

    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ git diff 4b6d0b2a dc785f69a
    diff --git a/index.html b/index.html
    index a698d54..9aefa39 100644
    --- a/index.html
    +++ b/index.html
    @@ -1,5 +1 @@
    -<html>
    -<body>
     My websit is alive!
    -</body>
    -</html>
     No newline at end of file
    git diff:工作目录中的已跟踪文件暂存区域之间的差异(指对已跟踪文件有效)git diff --cached:若要看已经暂存起来的文件和上次提交(也就是local repository)时快照之间的差异。

    主题8:git push指令

    一般情况下,一个代码仓库的分支可能是如下情况:

    Image 5

    比如此时James所在的分支为:develop,想要将本地分支合并到远程分支,可以使用下述指令:git push origin HEAD:refs/for/develop。其中origin:远程主机名;HEAD:指代本地分支名;develop:远程分支名;

    另一种情况可能是这样的:

    85613da80e31610f6dc64a228ad73797

    在推送代码的时候使用的是如下指令:

    git push yunos HEAD:refs/for/yunos/k88c/xxx/v6-k,其中yunos:远程主机名;HEAD:指代本地的当前分支;/yunos/k88c/xxx/v6-k:想要推送的远程分支名。

    用于将本地分支的更新推送到远程主机:git push <远程主机名> <本地分支名>:<远程分支名>。如果省略远程分支名,则表示将本地分支推送与之存在”追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建(一般需要写远程分支名)。如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。git push origin表示将当前分支推送到名为"origin主机"的对应分支。

    如果省略本地分支名,则表示删除指定的远程分支,相当于推送一个空的本地分支到远程分支。git push origin :master,相当于是:git push origin --delete master表明删除origin主机的master分支。

    主题9:git init指令

    将代码托管到Git仓库中,首先要做的是初始化(新建)仓库。

    对于Git来说,不管是初始化一个空的目录,还是装有很多Files的目录,初始化Git仓库都是一样的手法。

    gaoyating@gaoyating-PC MINGW64 /d/GitDemo
    $ cd public_html/
    gaoyating@gaoyating-PC MINGW64 /d/GitDemo/public_html
    $ ls
    james@james-PC MINGW64 /d/GitDemo/public_html
    $ echo 'My websit is alive!' > index.html
    james@james-PC MINGW64 /d/GitDemo/public_html
    $ ls
    index.html
    james@james-PC MINGW64 /d/GitDemo/public_html
    $ cat index.html
    My websit is alive!
    james@james-PC MINGW64 /d/GitDemo/public_html
    $ git init
    Initialized empty Git repository in D:/GitDemo/public_html/.git/
    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ ls
    index.html
    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ ll
    total 1
    -rw-r--r-- 1 james 197121 20 十二  3 09:41 index.html
    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ git status
    On branch master
    Initial commit
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
            index.html
    nothing added to commit but untracked files present (use "git add" to track)

    执行:git init指令可以初始化Git仓库;隐式地,Git会创建./.git(本目录中)目录。

    james@james-PC MINGW64 /d/GitDemo/public_html (master)
    $ ls -al
    total 5
    drwxr-xr-x 1 james 197121  0 十二  3 09:41 ./
    drwxr-xr-x 1 james 197121  0 十二  3 09:41 ../
    drwxr-xr-x 1 james 197121  0 十二  3 09:42 .git/
    -rw-r--r-- 1 james 197121 20 十二  3 09:41 index.html

    所有关于代码托管的信息,都会存放在.git目录中。

    由此上述执行指令,就为public_index目录创建了一个Git仓库;public_index目录中的所有代码即可托管于本地所在的Git仓库中。

    主题10:git clone指令

    仓库拷贝使用:git clone指令实现。

    james@james-PC MINGW64 /d/GitDemo
    $ git clone public_html/ clone_public
    Cloning into 'clone_public'...
    done.
    james@james-PC MINGW64 /d/GitDemo
    $ ls
    clone_public/  localGit/  public_html/  remoteGit/
    james@james-PC MINGW64 /d/GitDemo
    $ ls -al
    total 24
    drwxr-xr-x 1 james 197121 0 十二  3 21:14 ./
    drwxr-xr-x 1 james 197121 0 十二  3 09:40 ../
    drwxr-xr-x 1 james 197121 0 十二  3 21:14 clone_public/
    drwxr-xr-x 1 james 197121 0 十一 20 08:37 localGit/
    drwxr-xr-x 1 james 197121 0 十二  3 21:11 public_html/
    drwxr-xr-x 1 james 197121 0 十一 20 08:41 remoteGit/

    上述指令执行后,clone_pulic代码仓库即是public_html仓库的副本。

    查看clone_public仓库的状态:

    james@james-PC MINGW64 /d/GitDemo
    $ cd clone_public/
    james@james-PC MINGW64 /d/GitDemo/clone_public (master)
    $ git status
    On branch master
    Your branch is up-to-date with 'origin/master'.
    nothing to commit, working tree clean
    james@james-PC MINGW64 /d/GitDemo/clone_public (master)
    $ git log
    commit 8bac1e803752ec07728a8a702043cfdae9370eac
    Author: ZHANGEfeng-james <zfengwust3054@163.com>
    Date:   Sat Dec 3 21:12:14 2016 +0800
        testOtherName to test
    commit 908c2e3a0bcc23486887700214f451b00afeb07b
    Author: ZHANGEfeng-james <zfengwust3054@163.com>
    Date:   Sat Dec 3 21:02:13 2016 +0800
        move test to testOtherName
    commit a5e536ba19d80e5ab3d4b0ee0afc255bc8d23ba3
    Author: ZHANGEfeng-james <zfengwust3054@163.com>
    Date:   Sat Dec 3 20:59:49 2016 +0800
        test git mv
    commit 4481246b361b9b4e34da137af84b3cd09114af2c
    Author: ZHANGEfeng-james <zfengwust3054@163.com>
    Date:   Sat Dec 3 20:51:45 2016 +0800
        Remove poem.html
    commit 9cf7a35c1dc820f997c2536e2f3341fc9cb887ff
    Author: ZHANGEfeng-james <zfengwust3054@163.com>
    Date:   Sat Dec 3 20:51:06 2016 +0800
        test remove file
    commit 4b6d0b2a8b3268f9515eec522c4725980fe2feed
    Author: ZHANGEfeng-james <zfengwust3054@163.com>
    Date:   Sat Dec 3 10:30:14 2016 +0800
        Convert to HTML
    commit dc785f69abdcb1b2897d5a76bf38562186029e39
    Author: ZHANGEfeng-james <zfengwust3054@163.com>
    Date:   Sat Dec 3 10:14:26 2016 +0800
        Initial contents of public_html --author=Gao Yating <gaoya@163.com>

    发现仓库的历次提交均和public_html仓库相同。

    再次查看clone_public仓库和public_html仓库之间的关系,猜想是否有指向关系?

    james@james-PC MINGW64 /d/GitDemo/clone_public (master)
    $ git branch -a
    * master
      remotes/origin/HEAD -> origin/master
      remotes/origin/master
    james@james-PC MINGW64 /d/GitDemo/clone_public (master)
    $ git branch -vv
    * master 8bac1e8 [origin/master] testOtherName to test

    指令结果显示:clone_public仓库确实指向了远程的origin/master分支,但并没有指明远程仓库的路径。

    做一次commit和push实验,查看远程仓库:

    james@james-PC MINGW64 /d/GitDemo/clone_public (master)
    $ git status
    On branch master
    Your branch is up-to-date with 'origin/master'.
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
            clone.txt
    nothing added to commit but untracked files present (use "git add" to track)
    james@james-PC MINGW64 /d/GitDemo/clone_public (master)
    $ git add .
    james@james-PC MINGW64 /d/GitDemo/clone_public (master)
    $ git commit -m "clone test"
    [master 5b830e5] clone test
     1 file changed, 1 insertion(+)
     create mode 100644 clone.txt
    james@james-PC MINGW64 /d/GitDemo/clone_public (master)
    $ git status
    On branch master
    Your branch is ahead of 'origin/master' by 1 commit.
      (use "git push" to publish your local commits)
    nothing to commit, working tree clean

    结果提示,clone_public仓库的commit超前于远程仓库,需要使用git push指令进行同步。

    james@james-PC MINGW64 /d/GitDemo/clone_public (master)
    $ git push origin HEAD:master
    Counting objects: 3, done.
    Delta compression using up to 8 threads.
    Compressing objects: 100% (2/2), done.
    Writing objects: 100% (3/3), 329 bytes | 0 bytes/s, done.
    Total 3 (delta 0), reused 0 (delta 0)
    remote: error: refusing to update checked out branch: refs/heads/master
    remote: error: By default, updating the current branch in a non-bare repository
    remote: error: is denied, because it will make the index and work tree inconsistent
    remote: error: with what you pushed, and will require 'git reset --hard' to match
    remote: error: the work tree to HEAD.
    remote: error:
    remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
    remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
    remote: error: its current branch; however, this is not recommended unless you
    remote: error: arranged to update its work tree to match what you pushed in some
    remote: error: other way.
    remote: error:
    remote: error: To squelch this message and still keep the default behaviour, set
    remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
    To D:/GitDemo/public_html/
     ! [remote rejected] HEAD -> master (branch is currently checked out)
    error: failed to push some refs to 'D:/GitDemo/public_html/'

    执行push操作后的结果出现错误,但是引出了远程仓库地址:D:/GitDemo/public_html;出错的原因在于:远程仓库初始化使用的是git init指令,而不是git --bare init。

  • 相关阅读:
    爬取豆瓣分页照片下载
    css布局:三列布局,中间内容优先加载
    解决在IE下label中IMG图片无法选中radio的几个方法
    CSS架构:最新最佳实践
    JavaScript登陆弹窗,可拖拽
    网站变成灰色的代码
    5个jQuery的备选轻量级移动客户端开发(Mobile development)类库
    jQuery 底部漂浮导航当前位置突出 + 锚点平滑滚动
    Exchange 2007 自定义传输规则
    基于jQuery打造TabPanel
  • 原文地址:https://www.cnblogs.com/CVstyle/p/6181043.html
Copyright © 2011-2022 走看看