练习使用Git

1.初始化本地仓库

新建一个目录,在目录中打开命令行,使用git init来初始化这个仓库

回到目录,可以看到目录中已经多出一个名为.git的隐藏目录

进入这个目录,里面有这样一堆文件和目录

它们的作用暂且不深究,至此,已经完成了本地仓库的初始化

2.初次提交

输入git status来查看当前仓库中的文件状态

目录中原有的文件在仓库初始化时并不会被追踪

使用git add a.txt将文件添加到暂存区

要把暂存区的文件提交到仓库,有两种方式:

  1. 直接输入git commit
  2. git commit -m "Commit message"

采用第一种方式提交时,会进入一个vim界面

i进入插入模式,输入提交信息,并使用:wq保存,保存后会回到命令行

查看当前状态git status

working tree clean意味着当前工作区的所有文件都与仓库中的版本一致

git log命令可以查看提交记录

HEAD -> master表示当前位于master分支上,first commit则是刚才提交时输入的说明

使用git commit -m "Commit message"可以在不进入vim的情况下进行快速提交

但如果working tree clean,则不会进行新的提交

3.使用tag

输入git tag <tagname> 即可给当前提交创建一个tag

通过git taggit log都能看到刚才创建的tag 1

使用git tag <tagname> <commit-hash>可以为其他的提交创建tag,只需要前几位即可

例如

这样,就为提交2cec6d754399344668745714d3b8c201953a9941创建了一个名为v1.0.0tag

使用git checkout <tagname>可以快捷地切换到一个tag上,但此时git会提示

“分离头指针状态(detached HEAD state)”状态,意味着当前不在任何分支上,而是直接指向某个特定的提交。

在这种状态下,任何新的提交不会记录在当前分支中,而是作为孤立的提交存在。

这些孤立的提交,会存在于本地仓库中,但如果没有进行额外的操作就切换到另一个分支或标签,这些孤立的提交可能会被 git 的垃圾回收机制(git gc)清除。

Annotated Tag(附注标签)的使用方法和tag差不多,仅需在git tag后面加上-a -m

tag相比,annotated tag会显示创建者,创建时间以及附注信息

git tag -d <tagname>可以用来删除某个tag

4.分支

git branch可以查看当前存在的分支

image-20240822193040731

git branch -a可以查看本地和远程的所有分支)

git branch <branch-name>从当前分支新建一个分支

1
2
git switch -c <branch-name>
git checkout -b <branch-name>

创建一个新的分支并立即切换到该分支

git branch -d <branch-name>删除分支

git merge <branch-name>将目标分支合并到当前分支

当把一个分支的分叉(比如从master分支创建的分支new1)合并到主分支,且主分支在分叉创建后没有进行修改,会使用Fast-forward 合并策略,将主分支的指针直接移动到分叉上,即直接用new1覆盖master

如果想把另一个分叉(new2)合并到主分支,且该new2和new1修改过同一个文件,则会提示Merge conflict

此时冲突的文件中会同时出现两个分支的内容,在手动修改后,使用git addgit commit完成合并

5.远程仓库

git remote add origin <repository_url>

添加一个名为origin的远程仓库

git push origin 本地分支:远程分支

输入token后,本地仓库被推送至远程仓库