Git-学习记录

1. Git-基础

1.1 获取 Git 仓库

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

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

1. 在已存在目录中初始化仓库:
先进入文件夹:

$ cd /home/xx/codes/go/src/my_project

之后执行:

$ git init

该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨干。

2. 克隆现有的仓库:
克隆仓库的命令是 git clone github_url 。比如可以用下面的命令:

$ git clone https://github.com/hualuo321/golearn.git

1.2 记录每次更新到仓库

现在我们的机器上有了一个 真实项目 的 Git 仓库,并从这个仓库中检出了所有文件的 工作副本。 通常,你会对这些文件做些修改,每当完成了一个阶段的目标,想要将记录下它时,就将它提交到仓库。

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

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

这说明你现在的工作目录相当干净,所有已跟踪文件在上次提交后都未被更改过。

现在,让我们在项目下创建一个新的 README 文件。 如果之前并不存在这个文件,使用 git status 命令,你将看到一个新的未跟踪文件:

扫描二维码关注公众号,回复: 14779544 查看本文章
$ echo 'My project' > README
$ git status
On branch main
Your branch is up to date with 'origin/main'.
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        README
nothing added to commit but untracked files present (use "git add" to track)

在状态报告中可以看到新建的 README 文件出现在 Untracked files 下面。 未跟踪的文件意味着 Git 在之前的快照(提交)中没有这些文件;

跟踪新文件:
使用命令 git add 开始跟踪一个文件。 此时再运行 git status 命令,会看到 README 文件已被跟踪,并处于暂存状态:

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

提交更新:
现在的暂存区已经准备就绪,可以提交了。 在此之前,请务必确认还有什么已修改或新建的文件还没有 git add 过, 否则提交的时候不会记录这些尚未暂存的变化。

每次准备提交前,先用 git status 看下,你所需要的文件是不是都已暂存起来了, 然后再运行提交命令 git commit

$ git commit

编辑器会显示类似下面的文本信息(本例选用 Vim 的屏显方式展示):

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch main
# Your branch is up to date with 'origin/main'.
# Changes to be committed:
#       new file:   README

另外,你也可以在 commit 命令后添加 -m 选项,将提交信息与命令放在同一行,如下所示:

$ git commit -m '功能1已完成'
[main e5eb4cb] 功能1已完成
 1 file changed, 1 insertion(+)
 create mode 100644 README

1.3 远程仓库的使用

为了能在任意 Git 项目上协作,你需要知道如何管理自己的远程仓库。 远程仓库是指托管在因特网或其他网络中的你的项目的版本库。

查看远程仓库:
如果想查看你已经配置的远程仓库服务器,可以运行 git remote 命令。 它会列出你指定的每一个远程服务器的简写。 如果你已经克隆了自己的仓库,那么至少应该能看到 origin ——这是 Git 给你克隆的仓库服务器的默认名字:

$ git remote
origin

你也可以指定选项 -v,会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL。

$ git remote -v
origin  https://github.com/hualuo321/golearn.git (fetch)
origin  https://github.com/hualuo321/golearn.git (push)

添加远程仓库:
运行 git remote add 添加一个新的远程 Git 仓库,同时指定一个方便使用的简写:

$ git remote add gol https://github.com/hualuo321/golearn
$ git remote -v
gol     https://github.com/hualuo321/golearn (fetch)
gol     https://github.com/hualuo321/golearn (push)
origin  https://github.com/hualuo321/golearn.git (fetch)
origin  https://github.com/hualuo321/golearn.git (push)

从远程仓库中抓取与拉取:
从远程仓库中获得数据,可以执行:

$ git fetch gol

这个命令会访问远程仓库,从中拉取所有你还没有的数据。 执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看。

如果你使用 clone 命令克隆了一个仓库,命令会自动将其添加为远程仓库并默认以 “origin” 为简写。 所以,git fetch origin 会抓取克隆(或上一次抓取)后新推送的所有工作。 必须注意 git fetch 命令只会将数据下载到你的本地仓库——它并不会自动合并或修改你当前的工作。

推送到远程仓库:
当你想分享你的项目时,必须将其推送到上游。git push <remote> <branch>

2. Git-分支

2.1 Git 分支的新建与合并

首先,我们假设你正在项目中愉快地工作,并且已经提交了几次更新。
在这里插入图片描述
现在,你决定要修补问题追踪系统上的 #53 问题,要新建并切换到该分支,运行 git checkout 并加上 -b参数:

$ git checkout -b iss53
Switched to a new branch 'iss53'

这相当于执行下面这两条命令:

$ git branch iss53
$ git checkout iss53

在这里插入图片描述
接着你开始尝试修复问题,在提交了若干次更新后,iss53 分支的指针也会随着向前推进,因为它就是当前分支。

$ vim index.html
$ git commit -a -m 'added a new footer [issue 53]'

在这里插入图片描述
目前已经提交了所有的修改,所以接下来可以正常转换到 master 分支:

$ git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.

接下来,你得进行紧急修补。我们创建一个紧急修补分支 hotfix 来开展工作,直到搞定:

$ git checkout -b hotfix
Switched to a new branch 'hotfix'
$ vim index.html
$ git commit -a -m 'fixed the broken email address'

在这里插入图片描述
有必要作些测试,确保修补是成功的,然后回到 main 分支并把它合并进来,然后发布到生产服务器。用 git merge 命令来进行合并:

$ git checkout main
$ git merge hotfix
Updating fe39e83..027d6b7
Fast-forward
 index.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

请注意,合并时出现了“Fast forward”的提示。由于当前 master 分支所在的提交对象是要并入的 hotfix 分支的直接上游,Git 只需把 master 分支指针直接右移。换句话说,如果顺着一个分支走下去可以到达另一个分支的话,那么 Git 在合并两者时,只会简单地把指针右移,因为这种单线的历史分支不存在任何需要解决的分歧,所以这种合并过程可以称为快进(Fast forward)。
在这里插入图片描述
由于当前 hotfix 分支和 master 都指向相同的提交对象,所以 hotfix 已经完成了历史使命,可以删掉了。使用git branch 的 -d 选项执行删除操作:

$ git branch -d hotfix
Deleted branch hotfix (was 027d6b7).

现在回到之前未完成的 #53 问题修复分支上继续工作:

$ git checkout iss53
Switched to branch 'iss53'
$ vim index.html
$ git commit -a -m 'finished the new footer [issue 53]'

在这里插入图片描述
在问题 #53 相关的工作完成之后,可以合并回 master 分支。实际操作同前面合并 hotfix 分支差不多,只需回到 master 分支,运行 git merge 命令指定要合并进来的分支:

$ git checkout master
$ git merge iss53

请注意,这次合并操作的底层实现,并不同于之前 hotfix 的并入方式。Git 会用两个分支的末端(C4 和 C5)以及它们的共同祖先(C2)进行一次简单的三方合并计算。
在这里插入图片描述
这次,Git 没有简单地把分支指针右移,而是对三方合并后的结果重新做一个新的快照,并自动创建一个指向它的提交对象(C6)。
在这里插入图片描述

2.2 Git 分支的管理

  • 显示当前所有分支:
git branch
  • 删除某分支
git branch -d my_branch

猜你喜欢

转载自blog.csdn.net/qq_39547794/article/details/128991321