zoukankan      html  css  js  c++  java
  • git:distributed is the new centralized-part1

    PART 1


     

    梗概

    git文件流转有三个工作区域:工作目录(working directory)、暂存区域(staging area)、本地仓库(repository)。文件处于上述三个工作区域的状态分别为:已修改、已暂存、已提交。

    基本的git工作流程:在working diretory修改文件—>对修改的文件进行快照,保存到staging area—>提交更新,永久存储到repository中。

    从远程仓库克隆一个项目到本地当前目录:

    $ git clone git://xxx.git

    每次修改文件后如何提交到远程仓库

    git status:显示当前分支目录、是否有未纳入管理的文件(比如新创建的文件)等。

    git add xxx:将某个新文件纳入版本控制并放入暂存区;将修改的文件放入暂存区;

    如果不想把某些文件纳入版本控制,可以创建一个.gitingore文件,并列出文件格式,如:

    $ cat .gitignore
    *.[oa]
    *~

    git diff:查看尚未暂存的文件更新了哪些部分;
    git diff - -staged:查看已暂存的文件与上次提交时的差异;
    git commit:提交更新(暂存区域到本地仓库)。
    git commit -m “xxxxxx”:给上面的操作加注释。
    git commit -a -m “xxxxxx”:把修改的文件直接提交到本地仓库,跳过暂存区域的步骤;

    查看提交历史

    git log:查看提交历史;
    git log -p -2:仅显示最近的两次更新差异;

    撤销操作

    提交时忘了暂存某些修改,可以先补上暂存操作,再重新提交:

    $ git commit -m 'initial commit'
    $ git add forgotten_file
    $ git commit —amend

    使用git reset HEAD xxx取消已经暂存的文件;

    远程仓库的使用

    远程仓库是指托管在网络上的项目仓库,有些是只读的,有些是可写的。协作开发项目时,需要管理远程仓库,推、拉数据,分享进展。

    管理远程仓库,包括添加远程库、移除废弃的远程库、管理远程库分支、定义是否跟踪分支等等;

    git remote -v:查看当前的远程库,并显示对应的克隆地址。

    git remote add haha git:xxxxxx.git:添加一个新的远程库,并制定一个简单的名字,以便将来引用。 

    git fetch haha:把上面的远程仓库抓取到本地(因为本地木有)。fetch只是拉取,并不合并。

    git fetch origin:抓取从你上次克隆以来别人上传到此远程仓库的所有更新(克隆的仓库都是归于origin名下,即:你使用git clone下载下来的项目,在你本地的分支目录为origin/master)。

    git push origin master:把本地master分支推送到远程origin仓库(看上例可知,本地和远程都有个origin/master)。执行成功的前提:所克隆的服务器有写权限且同一时刻没有其他人正在推数据。

    git remote show origin:查看远程仓库(本例为origin)的信息。

    什么是git分支?

    假如我们提交三个文件,git会用blob对象存储每个文件的快照。而在提交的同时,会创建一个提交对象,该提交对象包含一个指向文件快照的指针、包含一个或者0个指向该提交对象的父对象的指针、包含一些其他附属信息。那么单个提交对象在仓库中的数据结构如图:

    之后每做一次提交,都会有一个指向上一次提交对象的指针,连续提交三次之后如下图:

    分支指向最新一个提交对象,git默认第一个分支为master,那么如下图:

    新创建一个分支,就是新增加一个指向最新提交对象的指针:git branch testing

    有一个特别指针HEAD,它在哪里就说明当前分支在哪里:

    使用git checkout testing切换到新创建的分支:

    其实就是HEAD指向新建分支了。

    你在新建的分支上提交一个修改,则又新增一个提交对象,变成这样:

    你再使用git checkout master切换到master分支,HEAD就又过去了:

    如果你在master再作修改,再提交,其实很明显,提交内容是不包括你testing分支的新增内容的,因为它目前指向的是前一个提交对象:

    所以,我们所有做的改变分别孤立在不同的分支里,我们可以在不同的分支里反复切换,并要在时机成熟时,将他们合并在一起。

    更多内容,关注我的IT微信订阅号:


    参考文档:https://git-scm.com/

  • 相关阅读:
    韩寒做错了(update 4 12)。
    放弃IE6。
    阿弥陀佛,我没有“抄袭”。
    婚姻。
    爆牙齿饭否?
    地震之后——和妈妈对话。
    8年前,《西班牙,我为你哭泣。》
    在等决赛中提问。
    地震之后——中国互联网在黑夜中哭泣。
    年轻。
  • 原文地址:https://www.cnblogs.com/mesopotamia/p/7531927.html
Copyright © 2011-2022 走看看