Git 基础教程

本贴最后更新于 400 天前,其中的信息可能已经物是人非

学习地址:Git - Book (git-scm.com)

git 基础

在已存在目录中初始化仓库

在尚未进行版本控制的项目目录下执行 git init

可以通过 git add​ 命令来指定所需的文件来进行追踪,然后执行 git commit​去提交 :

$ git add *.c
$ git add LICENSE
$ git commit -m 'initial project version'

git add使用文件或目录的路径作为参数;如果参数是目录的路径,该命令将递归地跟踪该目录下的所有文件。他也可以在文件做出修改时候将文件添加到暂存区。当运行了 ​​*git add​ 之后又作了修订的文件,需要重新运行 ​git add​ 把最新版本重新暂存起来不然提交的将是暂存区中修改前的文件*

检查当前文件状态

可以用 git status​ 命令查看哪些文件处于什么状态。使用 git status -s​ 命令将得到一种格式更为紧凑的输出。

$ git status -s
 M README
MM Rakefile
A  lib/git.rb
M  lib/simplegit.rb
?? LICENSE.txt

新添加的未跟踪文件前面有 ??​ 标记,新添加到暂存区中的文件前面有 A​ 标记,修改过的文件前面有 M​ 标记。 输出中有两栏,左栏指明了暂存区的状态,右栏指明了工作区的状态。

忽略文件

可以创建一个名为 .gitignore​ 的文件,列出要忽略的文件的模式。

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

查看已暂存的将要添加到下次提交里的内容,可以用 git diff --staged​ 命令

提交更新

git commit​​他会唤起文本编辑起来让你输入提交说明,也可以用 git commit -m "....."​​来直接添加说明

git commit​ 加上 -a​可以将全部文件都提交了,包括暂存区和未添加至暂存区的文件

提交时记录的是放在暂存区域的快照。 任何还未暂存文件的仍然保持已修改状态,可以在下次提交时纳入版本管理。 每一次运行提交操作,都是对你项目作一次快照,以后可以回到这个状态,或者进行比较。

移除文件

要从 Git 中移除某个文件, 可以用 git rm​ 命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。如果要删除之前修改过或已经放到暂存区的文件,则必须使用强制删除选项 -f​(force)。

如果只是想删除 git 仓库和暂存区的文件而不想删除本地文件(一般是在忘记添加.gitignore1​文件时候用)可以用 --cached​ 选项。

git rm​也支持 glob2模式

移动文件

git mv file_from file_to

查看提交历史

git log​,如果想展示具体修改了啥可以加选项 -p​,还可以加选项 -2​来限制展示的数量为 1:

commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Mon Mar 17 21:52:11 2008 -0700

    changed the version number

diff --git a/Rakefile b/Rakefile
index a874b73..8f94139 100644
--- a/Rakefile
+++ b/Rakefile
@@ -5,7 +5,7 @@ require 'rake/gempackagetask'
 spec = Gem::Specification.new do |s|
     s.platform  =   Gem::Platform::RUBY
     s.name      =   "simplegit"
-    s.version   =   "0.1.0"
+    s.version   =   "0.1.1"
     s.author    =   "Scott Chacon"
     s.email     =   "schacon@gee-mail.com"
     s.summary   =   "A simple gem for using Git in Ruby code."

加减是相比于上次,这次有什么更改:加了还是减了

git log --pretty=oneline​可以使得展示更加精简:

$ git log --pretty=oneline
ca82a6dff817ec66f44342007202690a93763949 changed the version number
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test
a11bef06a3f659402fe7563abf99ad00de2209e6 first commit

撤消操作

当上次提交不够完全,可以使用 git commit --amend​​​来在上次提交的基础上加上此次提交的内容而不会添加新的提交记录。

  1. git restore <file>​:将工作区中的文件还原为最近的提交状态,丢弃对文件的修改。
  2. git restore --staged <file>​:将暂存区中的文件还原为最近的提交状态,丢弃对文件的修改。

远程仓库

添加远程仓库:git remote add shortname url​,shortname​是简写可以代表 url​,用 git fetch url​来拉去最新的更新,一般 clone​下来的代码会以 origin​简写,即 origin​代表 clone​的 url​**。用**​git remote show​来展示远程的信息

远程仓库重命名用 git remote rename old_name new_name

推送到远程仓库

用命令 git push origin master​​来将 master​​分支推送到 origin​​上,注意推送的是整个分支

更新操作

git pull

克隆项目

git clone​ 默认是克隆 Head​指向的 master​分支,如果是多分支,我们可以单个克隆分支项目。

只克隆单分支(非 master):git clone -b 分支名 https://xxx.git

Git 分支

什么是分支?

**Git 的分支,其实本质上仅仅是指向提交对象的可变指针。**提交对象会指向父提交对象。直到找到根提交对象。

git 仓库会保存三种提交对象:blob 对象(文件快照)、树对象 (记录着目录结构和 blob 对象索引)、提交对象。然后各个提交对象之间组成了树,如下:

image

image

git log --oneline --decorate​可以查看所有分支,当要创建新的分支只要使用 git branch testing​即可,若再在 testing 分支上(需要分支切换3到 testing 上)push 时候就是提交新的提交对象,新的提交对象指向当前分支指针指向的对象然后分支指针指向新提交的对象。也可以用 -b​选项来指定在创建后自动切换到该分支

分支切换

使用 git checkout testing​ 命令切换,这样就是把 HEAD 指针切换到 testing 分支指针,如下图

image

切换之后工作目录也会随之改变

分支删除

git branch -d test

如果 git branch​不加任何的参数则会显示所有的分支

分支合并

使用 git merge test​来将 test​分支合并到 master​分支上,如果想要合并的分支 test​ 所指向的提交是 master​所在的提交的直接后继,则直接将 master​指针后移到 test​位置。如果不是这样则会对比两个分支生成新的提交放在末尾,新提交有两个父提交分别为 mater​与 test​。如果有冲突则会不提交冲突文件等待手动处理完毕自己手动 add commit

远程分支


  1. 可以创建一个名为 .gitignore​ 的文件,列出要忽略的文件的模式。

  2. glob​​模式

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

    # 忽略所有的 .a 文件
    *.a
    
    # 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
    !lib.a
    
    # 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO
    /TODO
    
    # 忽略任何目录下名为 build 的文件夹
    build/
    
    # 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
    doc/*.txt
    
    # 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
    doc/**/*.pdf
    
  3. 分支切换

  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    205 引用 • 357 回帖
2 操作
funnykeke 在 2023-05-10 22:10:45 更新了该帖
funnykeke 在 2023-04-28 00:30:29 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...