精华内容
下载资源
问答
  • git学习

    千次阅读 2021-01-12 19:50:27
    此博客主要用于记录git学习过程中的知识点,以后遗忘的时候可以快速查询。主要学习资料为git的参考api以及B站网课。 系统地学习git这个想法其实是不久之前才萌生的。从大二的时候开始接触到git,只会最简单的git ...

    此博客主要用于记录git学习过程中的知识点,以后遗忘的时候可以快速查询。主要学习资料为git的参考api以及B站网课。

    系统地学习git这个想法其实是不久之前才萌生的。从大二的时候开始接触到git,只会最简单的git clone,git push,git pull。也一直只会add,commit,push三连。因为那个时候基本只是自己需要从开源网站上获取代码供自己直接使用,以及提交作业,所以学了基本的功能也没有仔细研究深入。这一问题在本学期期末的课设中被无限的放大了。
    这一学期我们小组的课设是一个WEB设计的题目,采用了前后端分离开发的方法,因此我们借用了git的workflow,希望借此来起到比较好的并行开发的效果。然而由于对工作流的不熟悉,期间出现了由于前后端进度不同导致的merge难度过大,对git本地版本控制的不了解以至于切换分支时导致的工作丢失等等问题。因此决定在课设结束后的假期中尽快将git系统地学习。
    下面是git的学习笔记,由于之前已经对一些命令有所了解,因此此处命令学习可能不会太过细致,只是做标注记录。
    1. git的三大区域

    在这里插入图片描述
    要想要系统的学习git,首先需要了解的是git的三大工作区域。git可以被分为工作区(working directory),暂存区(stage或者index),版本库(history)。本地的代码修改过的代码都会在工作区当中保存,通过命令行可以将修改后的文件上传到暂存区,上传完毕后可以通过命令将修改记录保存为一个版本并保存在版本库当中。版本库当中利用HEAD指针指向当前版本。
    git的版本当中保存的是其父版本上对应的修改,因此版本之间事实上可以理解为树结构并且利用指针相连。保存在版本库当中的代码可以被拉取到本地以便于进行版本控制。

    2. git命令

    - git init
    在本地项目中git init会生成.git文件夹,里面包含git用于版本控制的配置文件。如果是远程仓库的项目初始化的话,git init会创建一个readme.md,里面包含部分默认的项目介绍,之后git会自动将该文件提交到stage并且commit形成一个版本,并且利用git remote add将远程仓库地址的URL标记为origin。

    - git add
    git add简单来说是将修改过的文件提交到Stage当中,命令后面可以加path也可以利用通配符进行文件的提交,除此之外,还有部分常用参数:
    -u:用于选中修改过的或者被删除的文件,不会选中untracked的文件;
    -A:选中所有不同的文件,即-u加上untracked;
    -i: 查看所有修改了但是还没有提交的文件。

    - git rm
    用于在版本控制中删除文件,删除时会将删除操作提交到STAGE上。

    - git commit

    简单来说用于生成一个版本。可以通过添加参数来实现额外功能。
    -m: 添加版本描述信息;
    -a: 无视Stage 提交所有在git版本控制管理下的文件,不建议使用
    -amend: 用于在merge前追加提交,可以在不生成一个新的commit-id的情况下将新的修改提交到当前commit-id中,建议在当前版本追加时使用,若需要切换到历史版本追加过于复杂。

    - git log
    简单来说主要用于查看commit的历史版本,如果要查看所有版本(包括已经回退的版本)应使用git reflog。通过添加参数实现其他功能。
    –online: 简化输出,只保留hash前7位以及commit message;
    –stat: 额外输出文件删改数据;
    -p(–show): 输出每一个commit的具体情况(show只显示一个,需要hash);
    –pretty: 自定义输出信息(git log --graph --pretty=format:"%h %s");
    –author: 检索筛选提交者;
    -n(数值): 限定输出个数;
    –after/–before: 限定时间;
    –graph:可视化;

    - git reset
    主要用于回退版本,主要有三种参数:soft,hard,mixed。
    –soft: 该参数会将HEAD指针指向目标版本,但是不会改变STAGE和工作区,包括原先删除或者新增的文件的记录都会保留在stage中。
    –mixed: 相较–soft会清空STAGE,所有的文件都需要重新add。
    –hard: 相较–mixed会将工作区的文件都改为对应版本的文件,原先的修改未提交的不会保留。

    - git branch
    用于查看分支或新建分支。-a可以查看所有分支(包括远程仓库)

    - git checkout
    用于检出文件,将文件修改成版本对应的默认文件,即回退单文件操作。而后面跟的参数为分支名时本质上就是将HEAD切换到对应分支之后将所有文件都检出为分支对应的原始版本。

    - git merge
    用于合并分支,若需要在A分支合并B分支,则需要先切换到A分支,再执行合并操作。而合并过程中,对同一个文件的相同位置进行修改会引起冲突(即git无法知道以指向的两个版本中的哪一个为准),这时git会在代码中用<<<<<<<<<HEAD这种方式标注两个版本的代码,用户自行决定如何保留代码之后将冲突标识删除,即人为解决冲突。
    注意:往往在main-dev开发的过程当中,每次merge到主分支之后,都需要对相应的dev分支进行merge。

    - git push
    主要对git push -u origin main这一命令进行解释:
    -u指的是设定默认值,此处设为origin main后之后若直接使用git push,则是默认向该远程分支push。
    origin是之前提到的在git init时git会将远程仓库地址的URL别名为origin,可用于快速访问。
    main表示的是分支。

    - git pull
    git pull事实上是两个命令的合并:fetch &merge。
    git fetch指的是用于追踪远程仓库的版本,将本地的版本库更新为远程仓库的版本库;
    git merge与之前原理相同。
    git pull 则是直接将远程仓库的版本放到工作区。

    - git rebase
    变基操作,功能强大但是复杂,且与远程仓库使用的时候情况需要具体讨论。此处还在更新中ing

    • 合并频繁多次的提交为一次,使history简洁易懂

    注意,此用法的rebase尽量用于未上传至远程仓库的版本,否则合并版本后从远程仓库下拉时merge极其复杂。
    git rebase -i 版本号:将该版本号之后到当前版本之间的版本合并;
    git rebase -i HEAD~n: 从当前版本号找最近的n个版本执行合并(选择s表示squash);选择s表示squash

    • 将分支合并为主分支的一部分

    此处通过举例的方式说明。
    现有主分支main,开发分支dev。目标为将开发完的dev分支变为主分支的一个版本。
    (1)git checkout dev //切换分支到dev上
    (2)git rebase main //将主分支在dev之后的版本全部放到dev之后
    (3)git checkout main//切回main分支
    (4)git merge dev//将dev分支合并回main

    展开全文
  • git 学习

    2013-07-23 12:46:21
    git 学习概要 基本满足上手需求

    1:本地创建完项目然后提交到github
    新建一个git项目  -->git init
    修改后 想要提交的话则 -->git add . -->git  commit
     (1)然后在github申请一个账号  新建一个项目  比如为bloodshare
     (2)在本地生成一个SSH KEY  并将生成的SSH key 添加到 github 中去
     (3)然后再执行git remote add bd git@github.com:github用户名/bloodshare.git
     (4)提交到远程仓库  git push bd master
     

    2:从其他地方clone过来然后在提交到固定的地方(内部合作)
     (1) 先CD到要创建项目的文件夹 然后再clone
      1,git clone git://github.com/libolongli/bloodshare.git  bd2(这样不能push上去 只有使用SSH 协议才能push上去)
      2,git clone git@github.com:libolongli/bloodshare.git bd2(这样才能push上去)
     (2) 修改完成后先 git add .->git commit -> git push origin master 这样就能提交上去
     (3) 其他用户则可以通过 git fetc或者git pull 将最新的代码更新下来

    3:查看历史版本
     使用git reset --soft(hard,mixed)  HEAD 来回滚代码  或者 git reset –hard commit (38679ed709fd0a3767b79b93d0fba5bb8dd235f8)
     git reset --soft HEAD~2 (回滚最近两次的代码)

     

    展开全文
  • Git学习

    千次阅读 2021-02-26 14:39:40
    Git记录更新 工作目录下的每一个文件都不外乎这两种状态:已跟踪 或 未跟踪。 已跟踪的文件: 是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后, 它们的状态可能是未修改,已修改...

    Git记录更新

    工作目录下的每一个文件都不外乎这两种状态:已跟踪 或 未跟踪。

    已跟踪的文件:

    是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后, 它们的状态可能是未修改,已修改或已放入暂存区。简而言之,已跟踪的文件就是 Git 已经知道的文件。

    未跟踪文件:

    工作目录中除已跟踪文件外的其它所有文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有被放入暂存区。

    检查当前文件状态

    git status
    

    跟踪新文件

    git add filename
    

    这是个多功能命令:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等。 将这个命令理解为“精确地将内容添加到下一次提交中”

    暂存已修改的文件

    如果修改了一个名为 CONTRIBUTING.md 的已被跟踪的文件

    git status
    On branch master
    Your branch is up-to-date with 'origin/master'.
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
        new file:   README
    
    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:   CONTRIBUTING.md
    

    现在运行 git add 将“CONTRIBUTING.md”放到暂存区

    git add CONTRIBUTING.md
    git status
    On branch master
    Your branch is up-to-date with 'origin/master'.
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
        new file:   README
        modified:   CONTRIBUTING.md
    

    状态简览

    git status -s
     M README
    MM Rakefile
    A  lib/git.rb
    M  lib/simplegit.rb
    ?? LICENSE.txt
    

    忽略文件

    一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件的模式。

    cat .gitignore
    # dirs
    build/
    
    # files
    *.o
    *.a
    
    

    查看已暂存和未暂存的修改

    如果 git status 命令的输出对于你来说过于简略,而你想知道具体修改了什么地方,可以用 git diff 命令。

    git diff
    diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
    index 8ebb991..643e24f 100644
    --- a/CONTRIBUTING.md
    +++ b/CONTRIBUTING.md
    @@ -65,7 +65,8 @@ branch directly, things can get messy.
     Please include a nice description of your changes when you submit your PR;
     if we have to read the whole diff to figure out why you're contributing
     in the first place, you're less likely to get feedback and have your change
    -merged in.
    +merged in. Also, split your changes into comprehensive chunks if your patch is
    +longer than a dozen lines.
    
     If you are starting to work on a particular area, feel free to submit a PR
     that highlights your work in progress (and note in the PR title that it's
    

    此命令比较的是工作目录中当前文件和暂存区域快照之间的差异。 也就是修改之后还没有暂存起来的变化内容。

    若要查看已暂存的将要添加到下次提交里的内容,可以用 git diff --staged 命令。 这条命令将比对已暂存文件与最后一次提交的文件差异:

    git diff --staged
    diff --git a/README b/README
    new file mode 100644
    index 0000000..03902a1
    --- /dev/null
    +++ b/README
    @@ -0,0 +1 @@
    +My Project
    

    请注意,git diff 本身只显示尚未暂存的改动,而不是自上次提交以来所做的所有改动。 所以有时候你一下子暂存了所有更新过的文件,运行 git diff 后却什么也没有,就是这个原因

    提交更新

    现在的暂存区已经准备就绪,可以提交了。

    git commit
    

    跳过使用暂存区域

    尽管使用暂存区域的方式可以精心准备要提交的细节,但有时候这么做略显繁琐。 Git 提供了一个跳过使用暂存区域的方式, 只要在提交的时候,给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤:

    git status
    On branch master
    Your branch is up-to-date with 'origin/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:   CONTRIBUTING.md
    
    no changes added to commit (use "git add" and/or "git commit -a")
    git commit -a -m 'added new benchmarks'
    [master 83e38c7] added new benchmarks
     1 file changed, 5 insertions(+), 0 deletions(-)
    

    移除文件

    要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。 可以用 git rm 命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。
    如果只是简单地从工作目录中手工删除文件,运行 git status 时就会在 “Changes not staged for commit” 部分(也就是 未暂存清单)看到:

    rm PROJECTS.md
    git status
    On branch master
    Your branch is up-to-date with 'origin/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:    PROJECTS.md
    
    no changes added to commit (use "git add" and/or "git commit -a")
    

    然后再运行 git rm 记录此次移除文件的操作:然后再运行 git rm 记录此次移除文件的操作:

    git rm PROJECTS.md
    rm 'PROJECTS.md'
    $ git status
    On branch master
    Your branch is up-to-date with 'origin/master'.
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
        deleted:    PROJECTS.md
    

    下一次提交时,该文件就不再纳入版本管理了。 如果要删除之前修改过或已经放到暂存区的文件,则必须使用强制删除选项 -f(译注:即 force 的首字母)。 这是一种安全特性,用于防止误删尚未添加到快照的数据,这样的数据不能被 Git 恢复。

    另外一种情况是,我们想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。 换句话说,你想让文件保留在磁盘,但是并不想让 Git 继续跟踪。 当你忘记添加 .gitignore 文件,不小心把一个很大的日志文件或一堆 .a 这样的编译生成文件添加到暂存区时,这一做法尤其有用。 为达到这一目的,使用 --cached 选项:

    git rm --cached README
    

    移动文件

    不像其它的 VCS 系统,Git 并不显式跟踪文件移动操作。 如果在 Git 中重命名了某个文件,仓库中存储的元数据并不会体现出这是一次改名操作。 不过 Git 非常聪明,它会推断出究竟发生了什么, 要在 Git 中对文件改名,可以这么做:

    git mv file_from file_to
    

    Git-基础-记录每次更新到仓库

    查看提交历史

    在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的工具是 git log 命令。

    git log
    commit ca82a6dff817ec66f44342007202690a93763949
    Author: Scott Chacon <schacon@gee-mail.com>
    Date:   Mon Mar 17 21:52:11 2008 -0700
    
        changed the version number
    
    commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
    Author: Scott Chacon <schacon@gee-mail.com>
    Date:   Sat Mar 15 16:40:33 2008 -0700
    
        removed unnecessary test
    
    commit a11bef06a3f659402fe7563abf99ad00de2209e6
    Author: Scott Chacon <schacon@gee-mail.com>
    Date:   Sat Mar 15 10:31:28 2008 -0700
    
        first commit
    

    git log 有许多选项可以帮助你搜寻你所要找的提交, 下面我们会介绍几个最常用的选项。

    其中一个比较有用的选项是 -p 或 --patch ,它会显示每次提交所引入的差异(按 补丁 的格式输出)。 你也可以限制显示的日志条目数量,例如使用 -2 选项来只显示最近的两次提交:

    git log -p -2
    commit ca82a6dff817ec66f44342007202690a93763949
    Author: Scott Chacon <schacon@gee-mail.com>
    Date:   Mon Mar 17 21:52:11 2008 -0700
    
        changed the version number
    
    diff --git a/Rakefile b/Rakefile
    index a874b73..8f94139 100644
    --- a/Rakefile
    +++ b/Rakefile
    @@ -5,7 +5,7 @@ require 'rake/gempackagetask'
     spec = Gem::Specification.new do |s|
         s.platform  =   Gem::Platform::RUBY
         s.name      =   "simplegit"
    -    s.version   =   "0.1.0"
    +    s.version   =   "0.1.1"
         s.author    =   "Scott Chacon"
         s.email     =   "schacon@gee-mail.com"
         s.summary   =   "A simple gem for using Git in Ruby code."
    
    commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
    Author: Scott Chacon <schacon@gee-mail.com>
    Date:   Sat Mar 15 16:40:33 2008 -0700
    
        removed unnecessary test
    
    diff --git a/lib/simplegit.rb b/lib/simplegit.rb
    index a0a60ae..47c6340 100644
    --- a/lib/simplegit.rb
    +++ b/lib/simplegit.rb
    @@ -18,8 +18,3 @@ class SimpleGit
         end
    
     end
    -
    -if $0 == __FILE__
    -  git = SimpleGit.new
    -  puts git.show
    -end
    

    该选项除了显示基本信息之外,还附带了每次提交的变化。 当进行代码审查,或者快速浏览某个搭档的提交所带来的变化的时候,这个参数就非常有用了。 你也可以为 git log 附带一系列的总结性选项。 比如你想看到每次提交的简略统计信息,可以使用 --stat 选项:

    git log --stat
    

    另一个非常有用的选项是 --pretty。 这个选项可以使用不同于默认格式的方式展示提交历史。 这个选项有一些内建的子选项供你使用。 比如 oneline 会将每个提交放在一行显示,在浏览大量的提交时非常有用。 另外还有 short,full 和 fuller 选项,它们展示信息的格式基本一致,但是详尽程度不一:

    git log --pretty=oneline
    ca82a6dff817ec66f44342007202690a93763949 changed the version number
    085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test
    a11bef06a3f659402fe7563abf99ad00de2209e6 first commit
    

    限制输出长度

    下面的命令会列出最近两周的所有提交:

    git log --since=2.weeks
    

    Git 基础 - 查看提交历史

    撤消操作

    有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行带有 --amend 选项的提交命令来重新提交:

    git commit --amend
    

    最终你只会有一个提交——第二次提交将代替第一次提交的结果。

    取消暂存的文件

    例如,你已经修改了两个文件并且想要将它们作为两次独立的修改提交, 但是却意外地输入 git add * 暂存了它们两个。如何只取消暂存两个中的一个呢? git status 命令提示了你:

    git add *
    git status
    On branch master
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
        renamed:    README.md -> README
        modified:   CONTRIBUTING.md
    
    git reset HEAD CONTRIBUTING.md
    Unstaged changes after reset:
    M	CONTRIBUTING.md
    $ git status
    On branch master
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
        renamed:    README.md -> README
    
    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:   CONTRIBUTING.md
    

    撤消对文件的修改

    如果你并不想保留对 CONTRIBUTING.md 文件的修改怎么办? 你该如何方便地撤消修改——将它还原成上次提交时的样子(或者刚克隆完的样子,或者刚把它放入工作目录时的样子)? 幸运的是,git status 也告诉了你应该如何做。 在最后一个例子中,未暂存区域是这样:

    git checkout -- CONTRIBUTING.md
    git status
    On branch master
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
        renamed:    README.md -> README
    

    Git 基础 - 撤消操作

    远程仓库的使用

    查看远程仓库

    如果想查看你已经配置的远程仓库服务器,可以运行 git remote 命令。 它会列出你指定的每一个远程服务器的简写。 如果你已经克隆了自己的仓库,那么至少应该能看到 origin ——这是 Git 给你克隆的仓库服务器的默认名字:

    $ git clone https://github.com/schacon/ticgit
    Cloning into 'ticgit'...
    remote: Reusing existing pack: 1857, done.
    remote: Total 1857 (delta 0), reused 0 (delta 0)
    Receiving objects: 100% (1857/1857), 374.35 KiB | 268.00 KiB/s, done.
    Resolving deltas: 100% (772/772), done.
    Checking connectivity... done.
    $ cd ticgit
    $ git remote
    origin
    

    你也可以指定选项 -v,会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL。

    git remote -v
    origin	https://github.com/schacon/ticgit (fetch)
    origin	https://github.com/schacon/ticgit (push)
    

    添加远程仓库

    我们在之前的章节中已经提到并展示了 git clone 命令是如何自行添加远程仓库的, 不过这里将告诉你如何自己来添加它。 运行 git remote add 添加一个新的远程 Git 仓库,同时指定一个方便使用的简写:

    $ git remote
    origin
    $ git remote add pb https://github.com/paulboone/ticgit
    $ git remote -v
    origin	https://github.com/schacon/ticgit (fetch)
    origin	https://github.com/schacon/ticgit (push)
    pb	https://github.com/paulboone/ticgit (fetch)
    pb	https://github.com/paulboone/ticgit (push)
    

    现在你可以在命令行中使用字符串 pb 来代替整个 URL。 例如,如果你想拉取 Paul 的仓库中有但你没有的信息,可以运行 git fetch pb:

    git fetch pb
    remote: Counting objects: 43, done.
    remote: Compressing objects: 100% (36/36), done.
    remote: Total 43 (delta 10), reused 31 (delta 5)
    Unpacking objects: 100% (43/43), done.
    From https://github.com/paulboone/ticgit
     * [new branch]      master     -> pb/master
     * [new branch]      ticgit     -> pb/ticgit
    

    从远程仓库中抓取与拉取

    就如刚才所见,从远程仓库中获得数据,可以执行:

     git fetch <remote>
    

    这个命令会访问远程仓库,从中拉取所有你还没有的数据。 执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看。

    如果你使用 clone 命令克隆了一个仓库,命令会自动将其添加为远程仓库并默认以 “origin” 为简写。 所以,git fetch origin 会抓取克隆(或上一次抓取)后新推送的所有工作。 必须注意 git fetch 命令只会将数据下载到你的本地仓库——它并不会自动合并或修改你当前的工作。 当准备好时你必须手动将其合并入你的工作。

    如果你的当前分支设置了跟踪远程分支(阅读下一节和 Git 分支 了解更多信息), 那么可以用 git pull 命令来自动抓取后合并该远程分支到当前分支。 这或许是个更加简单舒服的工作流程。默认情况下,git clone 命令会自动设置本地 master 分支跟踪克隆的远程仓库的 master 分支(或其它名字的默认分支)。 运行 git pull 通常会从最初克隆的服务器上抓取数据并自动尝试合并到当前所在的分支。

    推送到远程仓库

    当你想分享你的项目时,必须将其推送到上游。 这个命令很简单:git push 。 当你想要将 master 分支推送到 origin 服务器时(再次说明,克隆时通常会自动帮你设置好那两个名字), 那么运行这个命令就可以将你所做的备份到服务器:

    git push origin master
    

    只有当你有所克隆服务器的写入权限,并且之前没有人推送过时,这条命令才能生效。 当你和其他人在同一时间克隆,他们先推送到上游然后你再推送到上游,你的推送就会毫无疑问地被拒绝。 你必须先抓取他们的工作并将其合并进你的工作后才能推送。 阅读 Git 分支 了解如何推送到远程仓库服务器的详细信息。

    查看某个远程仓库

    如果想要查看某一个远程仓库的更多信息,可以使用 git remote show 命令。 如果想以一个特定的缩写名运行这个命令,例如 origin,会得到像下面类似的信息:

    git remote show origin
    * remote origin
      Fetch URL: https://github.com/schacon/ticgit
      Push  URL: https://github.com/schacon/ticgit
      HEAD branch: master
      Remote branches:
        master                               tracked
        dev-branch                           tracked
      Local branch configured for 'git pull':
        master merges with remote master
      Local ref configured for 'git push':
        master pushes to master (up to date)
    

    它同样会列出远程仓库的 URL 与跟踪分支的信息。 这些信息非常有用,它告诉你正处于 master 分支,并且如果运行 git pull, 就会抓取所有的远程引用,然后将远程 master 分支合并到本地 master 分支。 它也会列出拉取到的所有远程引用。

    这是一个经常遇到的简单例子。 如果你是 Git 的重度使用者,那么还可以通过 git remote show 看到更多的信息。

    git remote show origin
    * remote origin
      URL: https://github.com/my-org/complex-project
      Fetch URL: https://github.com/my-org/complex-project
      Push  URL: https://github.com/my-org/complex-project
      HEAD branch: master
      Remote branches:
        master                           tracked
        dev-branch                       tracked
        markdown-strip                   tracked
        issue-43                         new (next fetch will store in remotes/origin)
        issue-45                         new (next fetch will store in remotes/origin)
        refs/remotes/origin/issue-11     stale (use 'git remote prune' to remove)
      Local branches configured for 'git pull':
        dev-branch merges with remote dev-branch
        master     merges with remote master
      Local refs configured for 'git push':
        dev-branch                     pushes to dev-branch                     (up to date)
        markdown-strip                 pushes to markdown-strip                 (up to date)
        master                         pushes to master                
    

    远程仓库的重命名与移除

    你可以运行 git remote rename 来修改一个远程仓库的简写名。 例如,想要将 pb 重命名为 paul,可以用 git remote rename 这样做:

    git remote rename pb paul
    git remote
    origin
    paul
    

    Git 基础 - 远程仓库的使用

    打标签

    像其他版本控制系统(VCS)一样,Git 可以给仓库历史中的某一个提交打上标签,以示重要。 比较有代表性的是人们会使用这个功能来标记发布结点( v1.0 、 v2.0 等等)。 在本节中,你将会学习如何列出已有的标签、如何创建和删除新的标签、以及不同类型的标签分别是什么。

    列出标签

    git tag
    v1.0
    v2.0
    
    git tag -l "v1.8.5*"
    v1.8.5
    v1.8.5-rc0
    v1.8.5-rc1
    

    创建标签

    Git 支持两种标签:轻量标签(lightweight)与附注标签(annotated)。

    轻量标签很像一个不会改变的分支——它只是某个特定提交的引用。

    而附注标签是存储在 Git 数据库中的一个完整对象, 它们是可以被校验的,其中包含打标签者的名字、电子邮件地址、日期时间, 此外还有一个标签信息,并且可以使用 GNU Privacy Guard (GPG)签名并验证。 通常会建议创建附注标签,这样你可以拥有以上所有信息。但是如果你只是想用一个临时的标签, 或者因为某些原因不想要保存这些信息,那么也可以用轻量标签。

    附注标签

    在 Git 中创建附注标签十分简单。 最简单的方式是当你在运行 tag 命令时指定 -a 选项:

    git tag -a v1.4 -m "my version 1.4"
    git tag
    v0.1
    v1.3
    v1.4
    

    -m 选项指定了一条将会存储在标签中的信息。 如果没有为附注标签指定一条信息,Git 会启动编辑器要求你输入信息。

    通过使用 git show 命令可以看到标签信息和与之对应的提交信息:

    git show v1.4
    tag v1.4
    Tagger: Ben Straub <ben@straub.cc>
    Date:   Sat May 3 20:19:12 2014 -0700
    
    my version 1.4
    
    commit ca82a6dff817ec66f44342007202690a93763949
    Author: Scott Chacon <schacon@gee-mail.com>
    Date:   Mon Mar 17 21:52:11 2008 -0700
    
        changed the version number
    

    输出显示了打标签者的信息、打标签的日期时间、附注信息,然后显示具体的提交信息。

    轻量标签

    另一种给提交打标签的方式是使用轻量标签。 轻量标签本质上是将提交校验和存储到一个文件中——没有保存任何其他信息。 创建轻量标签,不需要使用 -a、-s 或 -m 选项,只需要提供标签名字:

    git tag v1.4-lw
    git tag
    v0.1
    v1.3
    v1.4
    v1.4-lw
    v1.5
    

    这时,如果在标签上运行 git show,你不会看到额外的标签信息。 命令只会显示出提交信息:

    git show v1.4-lw
    commit ca82a6dff817ec66f44342007202690a93763949
    Author: Scott Chacon <schacon@gee-mail.com>
    Date:   Mon Mar 17 21:52:11 2008 -0700
    
        changed the version number
    

    后期打标签

    你也可以对过去的提交打标签。 假设提交历史是这样的:

    git log --pretty=oneline
    15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'experiment'
    a6b4c97498bd301d84096da251c98a07c7723e65 beginning write support
    

    现在,假设在 v1.2 时你忘记给项目打标签,也就是在 “updated rakefile” 提交。 你可以在之后补上标签。 要在那个提交上打标签,你需要在命令的末尾指定提交的校验和(或部分校验和):

    git tag -a v1.2 9fceb02
    

    删除标签

    要删除掉你本地仓库上的标签,可以使用命令 git tag -d 。 例如,可以使用以下命令删除一个轻量标签:

    git tag -d v1.4-lw
    Deleted tag 'v1.4-lw' (was e7d5add)
    

    Git 基础 - 打标签

    分支简介


    Git 分支 - 分支简介

    额外整理:

    切换分支:

    git checkout master
    

    合并分支

    git merge whitespace
    

    中断一次合并

    git merge --abort 
    

    回到上一次提交的状态

    git reset --hard HEAD
    

    合并时忽略空白
    使用 -Xignore-all-space 或 -Xignore-space-change 选项

     git merge -Xignore-space-change whitespace
    

    撤消合并
    Git 工具 - 高级合并

    将一个已存在的 Git 仓库添加为正在工作的仓库的子模块

    git submodule add https://github.com/chaconinc/DbConnector
    Cloning into 'DbConnector'...
    remote: Counting objects: 11, done.
    remote: Compressing objects: 100% (10/10), done.
    remote: Total 11 (delta 0), reused 11 (delta 0)
    Unpacking objects: 100% (11/11), done.
    Checking connectivity... done.
    

    克隆含有子模块的项目

    git clone https://github.com/chaconinc/MainProject
    cd MainProject
    cd DbConnector/
    ls
    

    其中有 DbConnector 目录,不过是空的。 你必须运行两个命令:git submodule init 用来初始化本地配置文件,而 git submodule update 则从该项目中抓取所有数据并检出父项目中列出的合适的提交。
    不过还有更简单一点的方式。 如果给 git clone 命令传递 --recurse-submodules 选项,它就会自动初始化并更新仓库中的每一个子模块, 包括可能存在的嵌套子模块。

    git clone --recurse-submodules https://github.com/chaconinc/MainProject
    

    可以运行 git submodule update --init 将 git submodule init 和 git submodule update 合并成一步。如果还要初始化、抓取并检出任何嵌套的子模块, 请使用简明的 git submodule update --init --recursive
    Git 工具 - 子模块

    展开全文
  • GIT学习

    2016-06-16 11:38:51
    看完了廖老师的学习git资料,收获许多!这里分享学习地址Git教程 Git Book git简明指南 常用 Git 命令清单 猴子都能懂的GIT入门

    看完了廖老师的学习git资料,收获许多!这里分享学习地址

    Git教程

    Git Book

    git简明指南

    常用 Git 命令清单

    猴子都能懂的GIT入门

    展开全文
  • Git 学习

    千次阅读 2012-08-08 10:48:05
    Git常用操作命令收集: 1) 远程仓库相关命令 检出仓库:$ git clone git://github.com/jquery/jquery.git 查看远程仓库:$ git remote -v 添加远程仓库:$ git remote add [name] [url] 删除远程仓库:$ ...
  • git学习总结
  • Git学习笔记

    千次阅读 2018-09-19 15:16:54
    Git学习笔记 文章目录Git学习笔记@[toc]前言配置git新建仓库增加和删除文件提交修改分支标签查看信息远程同步撤销理解工作区和暂存区gitignore 前言 git作为世界上最先进的分布式版本控制系统,为我们管理自己...
  • Git学习资料

    千次阅读 2018-01-04 15:03:41
    关于Git的用法我们已经写七篇文章,介绍了Git的不少用法,这些足以应付工作中90%的需求了,剩下的10%就需要小伙伴们在工作中自己慢慢总结了,我这里再给小伙伴们推荐一点Git学习资料,为我们的Git系列画上一个句号。...
  • git 学习笔记

    2016-10-19 22:32:15
    git 学习笔记最近从 svn 转到 git。这两个版本控制系统区别蛮大的,还是有点不适用。做个笔记,记录 git 的各种常用操作。算是给自己做个备忘。git 使用前的配置首先要设置自己的用户名和邮箱名。 git config --...
  • Git 学习笔记

    2018-12-04 16:24:42
    Git 学习笔记 学习链接:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375840202368c74be33fbd884e71b570f2cc3c0d1dcf000 1.git version 查看版本 2.git init; Git ...
  • git学习——&amp;amp;gt;在CenterOS系统上安装GitLab并自定义域名访问GitLab管理页面 git学习——&amp;amp;gt;如何汉化GitLab? (转)git学习——&amp;amp;gt;Git 分支管理最佳实践 git学习—...
  • git学习笔记

    2016-03-30 12:16:05
    git学习笔记

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 45,507
精华内容 18,202
关键字:

git学习