Git学习笔记

一、初次运行Git前的配置

  安装好Git后,需要配置一些环境变量,这些变量可以存放在三个地方:/etc/gitconfig,~/.gitconfig,当前项目的 git 目录中的配置文件(也就是工作目录中的 .git/config 文件)。

配置用户信息

  这两条配置很重要,每次Git提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录。

$ git config –global user.name “username”
$ git config –global user.email user@163.com

查看配置信息:

$ git config –list
查看某个环境变量的设定:$ git config user.name

获取帮助

如 $ git help config

二、Git基础

两种取得Git项目仓库的方法

  1. 在现有目录下,通过导入所有文件来创建新的Git仓库
    • Step1:要对现有项目开始使用Git管理,在此项目所在目录执行,$ git init
      初始化后,当前目录出现名为.git的目录,所有Git需要的数据和资源都放在此目录下。
    • Step2: 如果当前目录下有几个文件想要纳入版本控制,需要先用$ git add 命令告诉 Git 开始对这些文件进行跟踪,然后$ git commit –m ‘initial project version’ 提交
  2. 从已有的Git仓库克隆出一个新的镜像仓库。
    克隆仓库的命令格式为$ git clone git://github.com/schacon/grit.git mygit(可略)

每次更新到仓库

  1. 工作目录下所有文件都不外乎两种状态:
    • 已跟踪:本来就被纳入版本控制管理的文件,在上次快照中有它们的记录,工作一段时间后,它们的状态可能是未更新,已修改或者已放入暂存区。
      初次克隆某个仓库时,工作目录中的所有文件都属于已跟踪文件,且状态为未修改。在编辑过某些文件之后,Git 将这些文件标为已修改。我们逐步把这些修改过的文件放到暂存区域,直到最后一次性提交所有这些暂存起来的文件,如此重复。
    • 未跟踪:所有其他文件都属于未跟踪文件。它们既没有上次更新时的快照,也不在当前的暂存区域。
  2. git status 命令查看文件状态
    • “Untracked files”下面是未跟踪的文件
    • “Changes to be committed” 这行下面的,就说明是已暂存状态。如果此时提交,那么该文件此时此刻的版本将被留存在历史记录中。
    • “Changes not staged for commit” 这行下面,说明已跟踪文件的内容发生了变化,但还没有放到暂存区。
  3. git add 的潜台词就是把目标文件快照放入暂存区域
    可以用它开始跟踪新文件,或者暂存已修改的文件,还能用于合并时把有冲突的文件标记为已解决状态等
  4. 忽略某些文件
      一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式。$ cat .gitignore
    .gitignore 文件的例子:
# 此为注释 – 将被 Git 忽略
    # 忽略所有 .a 结尾的文件
    *.a
    # 但 lib.a 除外
    !lib.a
    # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
    /TODO
    # 忽略 build/ 目录下的所有文件
    build/
    # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
    doc/*.txt
  1. 查看已暂存和未暂存的更新
    git diff :当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容
    git diff –cached/ git diff --staged :已经暂存起来的文件和上次提交时的快照之间的差异
  2. 提交更新
    现在的暂存区域已经准备妥当可以提交了。在此之前,请一定要确认还有什么修改过的或新建的文件还没有 git add 过,否则提交的时候不会记录这些还没暂存起来的变化。所以,每次准备提交前,先用 git status 看下,是不是都已暂存起来了,然后再运行提交命令 git commit(这种方式会启动文本编辑器以便输入本次提交的说明)。
    记住,提交时记录的是放在暂存区域的快照,任何还未暂存的仍然保持已修改状态,可以在下次提交时纳入版本管理。每一次运行提交操作,都是对你项目作一次快照,以后可以回到这个状态,或者进行比较。
  3. 跳过使用暂存区域
    Git 提供了一个跳过使用暂存区域的方式,只要在提交的时候,git commit -a ,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤
  4. 移除文件
    情况一:要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。可以用 git rm 命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。
    如果只是简单地从工作目录中手工删除文件,运行 git status 时就会在 “Changes not staged for commit” 部分(也就是未暂存清单)看到。
    如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 –f。
    情况二:我们想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。换句话说,仅是从跟踪清单中删除。比如一些大型日志文件或者一堆 .a 编译文件,不小心纳入仓库后,要移除跟踪但不删除文件,以便稍后在 .gitignore 文件中补上,用$ git rm --cached即可。
  5. $ git mv file_from file_to

查看提交历史

$ git log
  常用 -p 选项展开显示每次提交的内容差异,用 -2 则仅显示最近的两次更新:$ git log -p -2
  注意:按q突出历史记录列表,可以继续输入git命令
  限制输出长度:请注意,如果要得到同时满足这两个选项搜索条件的提交,就必须用 --all-match 选项。否则,满足任意一个条件的提交都会被匹配出来

-(n) 仅显示最近的 n 条提交
--since, --after 仅显示指定时间之后的提交。
--until, --before 仅显示指定时间之前的提交。
--author 仅显示指定作者相关的提交。
--committer 仅显示指定提交者相关的提交。

  另一个真正实用的git log选项是路径(path),如果只关心某些文件或者目录的历史提交,可以在 git log 选项的最后指定它们的路径。因为是放在最后位置上的选项,所以用两个短划线(--)隔开之前的选项和后面限定的路径名。

撤销操作

  请注意,有些撤销操作是不可逆的,所以请务必谨慎小心,一旦失误,就有可能丢失部分工作成果。

  1. 修改最后一次提交
    想要撤消刚才的提交操作,可以使用 --amend 选项重新提交:$ git commit --amend
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend

上面的三条命令最终只是产生一个提交,第二个提交命令修正了第一个的提交内容。
2. 取消已经暂存的文件
Changes to be committed下面,括号中有提示,可以使用 git reset HEAD ...的方式取消暂存。
3. 取消对文件的修改
Changes not staged for commit下面,括号中有提示,可以使用 git checkout -- ... 的方式取消修改。
  你可能已经意识到了,这条命令有些危险,所有对文件的修改都没有了,因为我们刚刚把之前版本的文件复制过来重写了此文件。所以在用这条命令前,请务必确定真的不再需要保留刚才的修改。如果只是想回退版本,同时保留刚才的修改以便将来继续工作,可以用下章介绍的 stashing 和分支来处理,应该会更好些。

记住,任何已经提交到 Git 的都可以被恢复。即便在已经删除的分支中的提交,或者用 --amend 重新改写的提交,都可以被恢复。所以,你可能失去的数据,仅限于没有提交过的,对 Git 来说它们就像从未存在过一样。
原文地址:https://www.cnblogs.com/seven7seven/p/3986098.html