美文网首页
Git常规使用

Git常规使用

作者: 菜出意料 | 来源:发表于2019-12-01 10:01 被阅读0次
    • Git怎么使用?
    • 使用 git commit 进行提交操作时,Git都做了什么?

    Git怎么使用?

    下载、安装Git

    下载Git安装文件,教程链接

    获取Git仓库

    • 在现有目录中初始化仓库。
      在本地磁盘现有目录里运行 git init 命令,会在该目录下创建 .git 子文件夹,这个子文件夹含有你初始化的 Git 仓库中所有的必须文件。此时,我们仅仅是做了一个初始化的操作,你的项目里的文件还没有被跟踪。git init 会默认创建 master 分支!!!
    git init
    
    • 克隆现有的仓库
      使用 git clone [远程地址] 从远程仓库克隆。Git 克隆的是远程仓库上的几乎所有数据。
    git clone https://gitee.com/**/git_learn_test.git
    

    检查当前文件状态、跟踪文件变动

    使用 git status [-s] 检查当前文件状态

    git status
    
    工作目录无可跟踪文件
    # 在工作目录创建README文件
    echo '' >> README
    git status
    
    发现未跟踪的文件README
    在工作目录中新建的文件都处于未跟踪状态。**
    # 使用 git add 命令跟踪文件变动(文件新增、修改、删除都属于变动)
    git add README
    git status
    
    文件暂存
    可使用 git rm --cached <file> 命令将文件移出暂存区,使文件处于未跟踪状态。
    git rm --cached README
    git status
    
    将文件移出暂存区

    提交文件

    使用 git commit 命令将暂存区的文件提交到Git仓库。每次提交需要填写提交说明

    git commit -m "提交README文件"
    
    文件提交.png

    忽略文件

    如果文件不需要纳入Git的管理,可以创建名为 .gitignore 的文件,在文件中列出要忽略的文件模式。

    # 忽略当前目录左右的已.log为后缀的文件
    echo '*.log' >> .gitignore
    

    文件 .gitignore 的格式规范如下:

    • 所有空行或者以 # 开头的行都会被 Git 忽略。
    • 可以使用标准的 glob 模式匹配。
    • 匹配模式可以以(/)开头防止递归。
    • 匹配模式可以以(/)结尾指定目录。
    • 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
    glob模式又是个啥?

    所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。 星号(*)匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。 使用两个星号() 表示匹配任意中间目录,比如 a/*/z 可以匹配 a/z , a/b/z 或 a/b/c/z 等。

    # 忽略所有.a结尾的文件
    *.a
    
    # 不忽略lib.a,即跟踪lib.a文件
    !lib.a
    
    # 仅忽略当前文件下的TODO文件
    /TODO
    
    # 忽略build文件夹下的所有文件
    build/
    
    # 忽略doc文件(不含子文件夹)下的所有txt文件,忽略doc/a.txt,不忽略doc/t/b.txt
    doc/*.txt
    
    # 忽略doc文件夹及子文件夹下的所有pdf文件
    doc/**/*.pdf
    

    查看已暂存和未暂存的修改

    如果想知道具体修改了什么地方,可以使用git diff命令。

    • 注意: git diff只能查看本地工作目录修改未暂存的数据;git diff --cachedgit diff --staged(Git 1.6.1+版本支持)只能查看本地暂存区修改的数据!!未被跟踪(新追加)的数据不会被查看。
    # 修改README文件,追加123456
    echo '123456' >> README
    git diff
    
    查看工作目录中被修改的变化
    # 将README文件加入暂存区
    git add README
    # 当工作目录中没有被修改的文件后使用git diff不会输出任何内容
    git diff --staged # or git diff --cached
    
    查看暂存区被修改的变化

    移除文件

    从工作目录直接删除
    • 在本地磁盘直接删除文件
    git status
    
    image.png
    • 使用 git rm [文件],该命令会将文件从工作目录和Git仓库移除。
    git rm README
    git status
    
    image.png
    git commit后该文件就不再纳入版本管理了。如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f(译注:即 force 的首字母)。 这是一种安全特性,用于防止误删还没有添加到快照的数据,这样的数据不能被 Git 恢复。
    从Git仓库中删除,在工作目录中保留
    git rm --cached README
    git status
    
    image.png

    使用 git commit 进行提交操作时,Git都做了什么?

    当使用 git commit 进行提交操作时,Git 会先计算每一个子目录的校验和,然后在 Git 仓库中这些校验和保存为树对象。 随后,Git 便会创建一个提交对象,它除了包含上面提到的那些信息外,还包含指向这个树对象(项目根目录)的指针。如此一来,Git 就可以在需要的时候重现此次保存的快照。
    现在,Git 仓库中有五个对象:三个 blob 对象(保存着文件快照)、一个树对象(记录着目录结构和 blob 对象索引)以及一个提交对象(包含着指向前述树对象的指针和所有提交信息)。

    # 创建git仓库
    git init
    # 创建README1 README2 README3
    touch README{1..3}
    # 跟踪新文件
    git add README1 README2 README3
    # 提交
    git commit -m '提交新文件'
    
    提交对象及其树结构(图片来自网络)

    做些修改后再次提交,那么这次产生的提交对象会包含一个指向上次提交对象(父对象)的指针。

    提交对象及其父对象(图片来自网络)
    可以使用git log --pretty=oneline查看提交记录,历史记录按提交时间倒序排**
    git log --pretty=oneline
    
    查看提交历史
    查看提交历史

    相关文章

      网友评论

          本文标题:Git常规使用

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