git使用

作者: cclucc | 来源:发表于2019-11-15 19:45 被阅读0次

    概念

    Git 仓库有三个主要组成——工作目录,缓存区和提交历史。

    1、git的工作区:<mark style="box-sizing: border-box;">在当前仓库中,新增,更改,删除文件这些动作,都发生在工作区里面。</mark>

    2、git的暂存区:英文叫stage或index。在版本库.git/目录下,有一个index文件。它实际上就是一个包含文件索引的目录树,像是一个虚拟的工作区。在这个虚拟工作区的目录树中,记录了文件名、文件的状态信息(时间戳、文件长度等),文件的内容并不存储其中,而是保存在Git对象库(.git/objects)中,文件索引建立了文件和对象库中对象实体之间的对应。如果当前仓库,有文件更新,并且使用<mark style="box-sizing: border-box;">git add 命令,那么这些更新就会出现在暂存区中。</mark>

    3、版本库:当前仓库下,如果没有任何的提交,那么版本库就是对应上次提交后的内容。

    当对工作区修改(或新增)的文件执行 “git add” 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。

    当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。

    当执行 “git reset HEAD” 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。

    当执行 “git rm –cached ” 命令时,会直接从暂存区删除文件,工作区则不做出改变。

    当执行 “git checkout .” 或者 “git checkout – ” 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。

    使用git diff查看各个区之间的差异

    使用命令 代表意义
    git diff 比较的是工作区和暂存区的差别
    git diff –cached 比较的是暂存区和版本库的差别
    git diff HEAD 可以查看工作区和版本库的差别
    区域 命令 区域
    工作区 git add 暂存区
    暂存区 git commit 本地仓库
    本地仓库 git push 远程仓库
    操作 GIT SVN
    检出/复制/克隆 git clone svn checkout
    提交 git commit svn commit
    查看提交的详细记录 git show svn cat
    确认状态 git status svn status
    确认差异 git diff svn diff
    确认记录 git log svn log
    添加 git add svn add
    移动 git mv svn mv
    删除 git rm svn rm
    取消修改 git checkout / git reset svn revert
    创建分支 git branch svn copy
    切换分支 git checkout svn switch
    合并 git merge svn merge
    创建标签 git tag svn copy
    更新 git pull / git fetch svn update
    反映到远端 git push svn commit
    忽略档案目录 .gitignore .svnignore

    初始化

    $ git init:(在工作目录中初始化新仓库)

    $git clone [url]:(从现有仓库克隆)

    $ git clone git://github.com/schacon/grit.git mygrit

    更新仓库

    工作目录下面的所有文件都不外乎这两种状态:已跟踪或未跟踪

    已跟踪:

    已跟踪的文件是指本来就被纳入版本控制管理的文件,在上次快照中有它们的记录,工作一段时间后,它们的状态可能是未更新,已修改或者已放入暂存区。

    未跟踪:

    而所有其他文件都属于未跟踪文件。它们既没有上次更新时的快照,也不在当前的暂存区域。初次克隆某个仓库时,工作目录中的所有文件都属于已跟踪文件,且状态为未修改.

    $ git status:(检查当前文件状态)

    $ git add :(跟踪新文件)(暂存已修改文件)

    $git diff: (查看已暂存和未暂存的更新)

    $git diff --cached:(查看已经暂存起来的变化)

    .gitignore文件:(忽略某些文件)

    $ git commit:(提交更新)

    每次准备提交前,先用 git status 看下,是不是都已暂存起来了,然后再运行提交命令 git commit

    $ git commit

    这种方式会启动文本编辑器以便输入本次提交的说明。默认是vim,也可通过git config --global core.editor命令指定你喜欢的编辑软件

    $ git commit -m "Story 182: Fix benchmarks for speed"

    $ git commit -a -m 'added new benchmarks':(跳过使用暂存区域)

    $ git rm [filename]:(移除文件)

    $ git rm --cached [filename]:

    把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。

    $ git mv file_from file_to:(移动文件)

    查看历史

    $git log:(查看历史提交信息)

    $ git log -p -2:(查看最近两次提交信息)

    $ git log -U1 --word-diff:(单词层面的对比)

    $ git log --stat:(显示简要的增改行数统计)

    撤销操作

    $ git commit --amend:(修改最后一次提交)

    $ git reset HEAD benchmarks.rb:(取消已经暂存的文件)

    $ git checkout -- benchmarks.rb:(取消对文件的修改)

    远程仓库

    git remote:(Git 默认使用origin来标识你所克隆的原始仓库)

    $ git remote //查看当前的远程库

    origin

    $ git remote show origin //查看远程库origin的详细信息

    $ git remote rename pb paul //远程仓库重命名

    $ git remote rm paul //移除数据库

    $ git remote add pb git://github.com/paulboone/ticgit.gi //添加远程仓库,仓库名为pb

    git push:(从远程仓库抓取数据)

    $ git fetch [remote-name]

    git fetch origin 会抓取从你上次克隆以来别人上传到此远程仓库中的所有更新(或是上次 fetch 以来别人提交的更新)。有一点很重要,需要记住,fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好了,才能手工合并。

    git pull:(从远程仓库抓取数据,并自动合并)

    $ git fetch [remote-name]

    git push:(将本地仓库中的数据推送到远程仓库)

    $ git push [remote-name] [branch-name]

    $ git push origin master

    关于代码回滚

    git reset、git checkout 和 git revert 是你的 Git 工具箱中最有用的一些命令。它们都用来撤销代码仓库中的某些更改,而前两个命令不仅可以作用于提交,还可以作用于特定文件。

    git clone git commit git fetch git merge git pull git status

    HEAD branch: master Remote branch: master 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)

    关于分支

    相关文章

      网友评论

          本文标题:git使用

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