Git学习笔记

jopen 8年前

Git 初始化

git config

Git配置文件采用的是INI文件格式,git config用于读取和更改INI配置文件的内容

git config [<file-option>]  name value  git config [<file-option>] --unset name
  • 例:初始化姓名和邮件地址

    git config --system user.name "codenot"  git config --system user.email codenot@qq.com
  • 例:别名设置

    git config --system alias.ci commit  // 设置  git config --unset --system alias.ci // 删除
  • 例:命令输出开启颜色显示

    git config --global color.ui true

--global--system 表示配置的位置。
--global代表用户主目录下配置, --system代表系统级配置文件, 如果不加表示版本库级别配置文件。

暂存区相关操作

Git 的许多命令都是围绕着工作区、暂存区、版本库来执行的。
文件.git/index实际上就是一个包含文件索引的目录树,就是一个虚拟的工作区。这个虚拟工作区的目录树中,记录了文件名和文件的状态信息。.git/refs/head/master就是指向版本库的目录树.
文件的内容保存在Git对象库.git/objects目录中。

1. git add

工作区 --> 暂存区

表示把指定文件的内容写入到对象库中的一个新的对象中,然后更新暂存区目录树,记录到暂存区文件索引中。

2. git commit

暂存区 --> 版本库

表示把暂存区的目录树写到版本库中,master得到更新,让其指向新的目录树(即原来暂存区的目录树)。

3. git reset

  • 格式1:git reset [<commit>] -- <paths> ...

    此用法在命令中包含路径<paths>,这不会重置引用,更不会更改工作区,而是用指定的提交<commit>(省略则表示使用HEAD)下的文件<paths>替换掉暂存区的文件。

    解释下引用的意思: HEAD会指向refs/head/<branch>,修改引用就是修改refs/head/<branch>里面指向的值。

    • 例:

      git reset HEAD <paths> // 相当于取消之前执行的git add <paths>
    </li>
  • 格式2:git reset [--soft | --mixed | --hard] [<commit>]

    此用法会重置引用,根据不同的选项,可以对暂存区或工作区进行重置。省略<commit>则表示使用HEAD

    • 例:替换工作区、暂存区、引用

      git reset --hard <commit>
    • 例:只更改引用的指向

      git reset --soft <commit>
    • 例:更改引用指向、重置暂存区。

      git reset --mixed <commit> // 默认就为 --mixed
    • 例:

      git reset HEAD  // 表示把暂存区目录数替换成HEAD指向的目录树,工作区不受到影响。  git reset       // 同上
    • </ul> </li> </ul>

      4. git checkout

      • 格式1:git checkout [<commit>] [--] <paths> ...

        表示用commit指向的目录树替换暂存区以及工作区,commit省略则相当于从暂存区检出

        • 例:

          git checkout -- <file>   // 用暂存区的file替换工作区的  git checkout .           // 用暂存区所有文件替换工作区  git checkout HEAD <file> // 表示用master指向的目录树文件替换暂存区以及工作区文件
        </li>
      • 格式2:git checkout [<bracnch>]

        • 例:

          git checkout branch  // 更新HEAD指向到branch分支,用branch指向的目录树更新暂存区和工作区  git checkout // 汇总显示工作区、暂存区与HEAD的差异.
        • </ul> </li>
        • 格式3:git checkout -b <new_branch> <start_point>

          • 相当于

            git branch <branchname>   // 创建分支  git checkout <branchname> // 切换到新的分支,新的分支从start_point指向的提交开始创建
          • </ul> </li> </ul>

            5. git diff

            git diff            // 工作区比较暂存区  git diff --cached   // 暂存区比较HEAD  git diff HEAD       // 工作区比较HEAD

            Git对象

            git cat-file -p sha1值  // 查看sha1对象内容

            远程版本库

            git checkout -b <new_branch> <remote-branch> // 从远程分支中创建本地分支,自动建立跟踪。  git remote add <remotename> <url> // 注册远程版本库  git remote -v  // 查看已经注册的远程版本库

            1. git push 命令解释:

            1. 如果为当前分支设置了<remote>, 则等于git push <remote>  2. 没有设置<remote>,等于 git push origin  3. 如果在远程版本库中创建分支,执行 git push <remote> <new_breanch>

            2. git pull