Git 学习笔记

本文详细介绍了Git的使用,包括获取仓库、文件状态管理、版本控制、远程仓库操作以及分支管理。从初始化仓库、克隆远程仓库到提交、版本回退,再到远程仓库的拉取与推送,以及分支的创建、合并与冲突解决,全方位覆盖Git的基本操作,旨在帮助读者掌握Git的日常使用技巧。
摘要由CSDN通过智能技术生成

目录

一、获取 Git 仓库

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

2. 克隆现有的远程仓库

二、文件状态:跟踪、暂存、提交

 1. 检查当前文件状态

2. 文件状态变更

三、版本控制

1. 查看提交历史

2. 版本回退与重返未来

3. 撤销修改

四、远程仓库

1. 查看远程仓库

2. 添加远程仓库

3. 跟踪分支

4. 从远程仓库中抓取与拉取

5. 推送到远程仓库

6. 多人协作

五、分支管理

1. 分支创建、切换、删除

2. 贮藏当前分支的工作

3. 分支合并与冲突解决

4. 复制一个特定的提交到当前分支


参考:

https://www.liaoxuefeng.com/wiki/896043488029600

https://git-scm.com/book/zh/v2


一、获取 Git 仓库

通常有两种获取 Git 项目仓库的方式:

  •         将尚未进行版本控制的本地目录转换为 Git 仓库;
  •         从其它服务器 克隆 一个已存在的 Git 仓库。

两种方式都会在你的本地机器上得到一个工作就绪的 Git 仓库。

首先选定本地Git的位置,用cd命令设置为当前目录:

$ cd /c/user/my_project

有需要的话可以在当前目录下创建新目录:

$ mkdir new_project

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

将本地目录初始化:

$ git init

追踪目录中的文件:

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

2. 克隆现有的远程仓库

克隆远程仓库:

$ git clone https://github.com/libgit2/libgit2 mylibgit

这会在当前目录下创建一个名为 “mylibgit” 的目录,并在这个目录下初始化一个 .git 文件夹, 从远程仓库拉取下所有数据放入 .git 文件夹。如果不加名称参数则使用远程文件夹名称“libgit2”。


二、文件状态:跟踪、暂存、提交

        未跟踪                              未修改                                已修改                               已暂存 


git-stage

git-stage-after-commit

 1. 检查当前文件状态

git status

可以用 git status 命令查看哪些文件处于什么状态:

$ git status

已跟踪文件在上次提交后都未被更改过,显示状态:

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

 已跟踪文件的内容发生了变化,但还没有放到暂存区:

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   README

 文件处于暂存(staged)状态:

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)

    new file:   README

存在未跟踪文件时,显示状态:

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
  (use "git add <file>..." to include in what will be committed)

    TEST

nothing added to commit but untracked files present (use "git add" to track)

git diff

查看具体变更内容:

$ git diff readme.txt 
diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
 Git is free software.

可以从上面的命令输出看到,我们在第一行添加了一个distributed单词。

2. 文件状态变更

新建文件:

$ echo 'My Project' > README

在文件中新加一行:

$ echo 'add some information' >> README

跟踪新文件,或将修改进行暂存(可理解为将内容添加到下一次提交中):

$ git add README

提交文件,并启动文本编辑器来输入comments:

$ git commit

提交文件,并将提交信息与命令放在同一行:

$ git commit -m "输入comments" 

把所有已经跟踪过的文件暂存起来一并提交(跳过git add到暂存区的步骤):

$ git commit -a -m 'added new benchmarks'
[master 83e38c7] added new benchmarks
 1 file changed, 5 insertions(+), 0 deletions(-)

忽略文件(无需纳入 Git 的管理的日志文件、临时文件等):

——创建一个名为 .gitignore 的文件,列出要忽略的文件的模式

$ cat .gitignore

# 忽略所有以 .o 或 .a 结尾的文件,一般这类对象文件和存档文件都是编译过程中出现的
*.[oa]

# 忽略所有名字以波浪符(~)结尾的文件,许多文本编辑软件(比如 Emacs)都用这样的文件名保存副本
*~

# 忽略所有的 .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

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

  • 所有空行或者以 # 开头的行都会被 Git 忽略。

  • 可以使用标准的 glob 模式(shell 所使用的简化了的正则表达式)匹配,它会递归地应用在整个工作区中。

  • 匹配模式可以以(/)开头防止递归。

  • 匹配模式可以以(/)结尾指定目录。

  • 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。


三、版本控制

1. 查看提交历史

我们用git log命令查看:

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

    changed the version number

commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Sat Mar 15 16:40:33 2008 -0700

    removed unnecessary test

commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Sat Mar 15 10:31:28 2008 -0700

    first commit

如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:

$ git log --pretty=oneline
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值