zoukankan      html  css  js  c++  java
  • Git常用命令

    Git 常用命令速查表(三)

    git clone 收取项目历史的所有数据(每一个文件的每一个版本),凡是服务器上有的数据,克隆之后本地也都有了。
    其中包含一个.git的目录,用于保存下载下来的所有版本记录。然后从中取出项目最新版本的所有文件拷贝放在与
    .git并列的文件夹下




    git init 对现有的某个项目开始用Git管理
    表示在当前目录(文件夹)下创建了一个.git的隐藏目录,这个就是所谓的Git本地仓库,所有 Git 需要的数据和资源都存放在这个目录中。
    git初始化之后,当前文件夹称之为work tree(工作树)。
     


    git add . 将当前目录下的所有文件纳入版本控制
    将工作树中增加或修改的一些文档生成快照存至Git本地仓库的一个暂存区stage中(
    称该区域为索引index
    ,并且变成Git本地仓库能够识别的数据格式。
    add 与后面的”.”是有一个空格的,这个”.”表示所有的文档。如果只生成一个文档,则将”.”改为“相对路径/文档名”即可。
    git add examples/ex_ssdata.cpp 
    新增加的文件是“Untracked files”,处于未跟踪状态;未跟踪的文件意味着Git在之前的快照(提交)中没有这些文件。
    Git 不会自动将之纳入跟踪范围,除非你使用“git add”明明白白地告诉它“我需要跟踪该文件”。
     

     
    git status 检查当前文件状态
         工作目录下面的所有文件都不外乎这两种状态:已跟踪或未跟踪。已跟踪的文件是指本来就被纳入版本控制管理的文件,在上次快照中有它们的记录,工作一段时间后,它们的状态可能是未更新(unmodified),已修改(modified)或者已放入暂存区。而所有其他文件都属于未跟踪文件。它们既没有上次更新时的快照,也不在当前的暂存区域。
    一般有以下几种状态:
    1. Untracked files:新创建的文件,还没有执行git add
    2. Changes not staged for commit:已跟踪的(或者曾经git add过的)文件修改之后,还没有执行git add进行暂存
    3. Changes to be committed:已经执行过git add,已暂存,下次将要被一起提交的文件


     
    git diff                     查看修改之后还没有暂存起来的文件和暂存区域快照之间的差异
    git diff --cached     查看已经暂存起来的文件和上次提交时的快照之间的差异
    git log #可以查看每次commit的改变
    git diff #可以查看最近一次改变的內容,加上参数可以看其它的改变并互相比较
    git show #可以看某次的变更
     


    git commit 将暂存区域的文件一起提交,完成纳入操作
    git add操作相当于把纸放入打印机;git commit相当于纸放进去之后要把门推进去合上,这样打印机才能工作!
    每次准备提交前,都必须先用git status看看哪些修改过的或新建的文件还没有git add过,否则提交的时候不会记录这些还没暂存起来的变化!!
    git commit -m "版本更新信息说明"

    # 也可以将git add与git commit用一个指令完成
    # git commit加上-a选项,Git就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过git add步骤。 git commit -a -m "msg"
     
    git commit -am "add ex_ssdata.cpp"
    将快照/索引中的内容提交到Git本地版本库中。Git的每次更新都需要提交一次。


     
    .gitignore 文档忽略
    在本地Git仓库的根目录创建一个名为.gitignore的文件,将工作树中你不希望接受Git管理的文档的文件模式写到.gitignore 文件中。
    通常都是些IDE配置文件或者自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。
    vim .gitignore
    # Atom
    .clang_complete
    .atom*.json
    .atom*.cson
     

     
    git rm  从工作目录中删除指定的文件,同时从已跟踪文件清单中移除(确切地说,是从暂存区域移除)。
    删除之后,必须执行 git commit,将删除该文件的操作提交上去。
     
    单纯用ubuntu命令rm来删除文件的话,仅仅是删除了物理文件,并没有将其从 git 的记录中剔除。
    对于用 rm 命令直接删除的文件,也可以再通过 git rm 命令重新将该文件从 git 的记录中删除掉,不能通过git add剔除。
    因为git add . 仅能记录添加、改动的动作,删除的动作需靠 git rm 来完成。
    1. 即通过:rm + git rm + git commit  -m "abc"的方式记录删除动作!
    2. 还可以通过:rm + git commit  -am "abc"的方式记录删除动作!
     
    git rm --cached 把文件从Git仓库中删除(亦即从暂存区域移除),但仍然保留在当前工作目录中。移除跟踪但不删除文件。
    比如一些大型日志文件或者一堆.a编译文件以及编译配置文件等,这些文件是必要的,所以要移除跟踪但不删除文件。
    移除之后,一定要在.gitignore 文件中补上这些文件条目。

    git rm log/*.log
    git rm *~    
    加反斜杠表示递归删除指定目录及其子目录中所有匹配的文件
     
    git checkout -- test.txt 把误删的文件test.txt用版本库里的文件恢复到最新版本
    其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
    如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。


     
    git mv file_from file_to  在Git中重命名某个文件
    仓库中存储的元数据并不会体现出这是一次改名操作,即不需要通过git add来进行暂存!


     
    git log 不加任何参数,会按提交时间列出所有的更新,最近的更新排在最上面。

         -p 按补丁格式显示每个更新之间的差异。
        --stat 显示每次更新的文件修改统计信息。
        --shortstat 只显示 --stat 中最后的行数修改添加移除统计。
        --name-only 仅在提交信息后显示已修改的文件清单。
        --name-status 显示新增、修改、删除的文件清单。
        --abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。
        --relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)。
        --graph 显示 ASCII 图形表示的分支合并历史。
        --pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)。
    
    
         -(n) 仅显示最近的 n 条提交
        --since, --after 仅显示指定时间之后的提交。
        --until, --before 仅显示指定时间之前的提交。
        --author 仅显示指定作者相关的提交。
        --committer 仅显示指定提交者相关的提交。


    
    
    撤销操作:
    git commit --amend                            

    修改最后一次提交

    git reset HEAD benchmarks.rb    取消已经暂存的文件
    git checkout -- benchmarks.rb  取消对文件的修改
    这条命令有些危险,所有对文件的修改都没有了,因为该操作是把之前版本的文件复制过来重写了此文件。
     


    远程仓库操作:
    git remote            查看当前配置有哪些远程仓库
    git remote add origin git@github.com:fuleying/git-download.git  为远程仓库增加一个别名
    git remote -v  --verbose的简写,显示远程仓库对应的克隆地址
    git remote show [remote-name]      查看某个远程仓库的详细信息
    git remote rename  from  to                     命令修改某个远程仓库在本地的简称
    git remote rm 
    [remote-name]          移除远端仓库的别名


     

    分支:分支全部都是本地分支。当你在使用分支及合并的时候,一切都是在你自己的Git仓库中进行的,完全不涉及与服务器的交互。

    1.新建分支(名为local),仅仅是建立了一个新的分支,但不会自动切换到这个分支中去。
    git branch local 从当前分支(默认HEAD处)分化出一个新的分支
    git checkout -b local
    从当前分支(默认HEAD处)分化出一个新的分支并切换到该分支
    git branch local [远程名/分支名] 从指定分支处分化出一个新的分支
    git checkout -b local [
    远程名/分支名
    从指定分支处分化出一个新的分支并切换到该分支

    2.查看存在多少分支[-a也显示远程仓库分支]

    $ git branch [-a]
        local
        * master  *字符表示当前所在的分支

    git branch -r
    查看远程分支remote,用 (远程仓库名)/(分支名) 的形式表示远程分支。

    远程分支(remote branch)是对远程仓库中的分支的索引。一次Git clone,会自动为你将此远程仓库命名为origin,并下载其中所有的数据,建立一个指向它的master分支的指针,在本地命名为origin/master,但你无法在本地更改其数据。
    接着,Git建立一个属于你自己的本地master分支,始于origin上 master分支相同的位置,你可以就此开始工作。

    可以运行git fetch origin来同步远程服务器上的数据到本地。该命令首先找到origin是哪个服务器,然后从上面获取你尚未拥有的数据,更新你本地的数据库,然后把origin/master的指针移到它最新的位置上。

    git branch -v
    查看各个分支最后一个提交对象的信息verbose
    git branch --merge 查看哪些分支已被并入当前分支。
    列表中没有*的分支通常都可以用git branch -d来删掉,因为已经把它们所包含的工作整合到了其他分支,删掉也不会损失什么。
    git branch --no-merged 查看尚未合并的分支
     

    3.切换到分支/主文件夹

    $ git checkout local

     

    4.分支的合并

    $ git checkout master # 将当前分支切换为master
    $ git merge local # 将local分支合并当前分支master上

    第一种合并情况:如果顺着一个分支走下去可以到达另一个分支的话,那么Git在合并两者时,只会简单地把指针右移,称为快进(Fast forward)。
    第二种合并情况:
    如果是两个分叉的分支进行合并,Git会用两个分支的末端(C4和C5)以及它们的共同祖先(C2)进行一次简单的三方合并计算。Git没有简单地把分支指针右移,而是对三方合并后的结果重新做一个新的快照,并自动创建一个指向它的提交对象(C6)(见图 3-17)。这个提交对象比较特殊,它有两个祖先(C4 和 C5)。

    第三种合并情况:
    如果在不同的分支中都修改了同一个文件的同一部分,Git就无法干净地把两者合到一起。Git作了合并,但没有提交,它会停下来等你解决冲突。要看看哪些文件在合并时发生冲突,可以git status查阅。任何包含未解决冲突的文件都会以未合并(unmerged)的状态列出。

     

    5.分支衍合:把在一个分支里提交的改变移到另一个分支里重放一遍。

    $ git rebase
    虽然会跟merge合并操作得到的结果没有任何区别,但衍合能产生一个更为整洁的提交历史,仿佛所有修改都是在一根线上先后进行的。

    6.删除分支,一般是合并之后将重复的分支删除

    $ git branch -d local


     
    git pull:从远端仓库取回版本更新
    • pull指令其实包含了fetch(將变更复制回來)以及merge(合并)操作两个步骤!
    • git push:可将本地版本更新推送到远端仓库中。
      # 将github(远程)的git档案与本地的同步(即更新本地端的repo)
      push命令只能将代码push到你自己的分支上。

     

    push 提交(这里提交的方式是使用http的方式,也有ssh的提交方法,这里面就不做介绍了)

    git remote add origin https://github.com/username/Hello-World.git  

    (其中的https://github.com/username/Hello-World.git,是该项目的http,这可以在网页上得到,复制过来即可)

    之后会要求输入用户名和密码

    提交的命令是:

    git push origin master

  • 相关阅读:
    beta冲刺—— Day 4
    beta冲刺—— Day 3
    beta冲刺—— Day 2
    刚下飞机——Beta阶段随笔集合
    刚下飞机——Alpha冲刺
    刚下飞机——Beta答辩博客
    刚下飞机——用户使用调查报告
    刚下飞机——Beta冲刺总结博客
    Beta冲刺(7/7)
    Beta冲刺(6/7)
  • 原文地址:https://www.cnblogs.com/fuleying/p/5326010.html
Copyright © 2011-2022 走看看