文章

Git进阶

Git进阶

该文记录 Git 进阶使用。

Git进阶

1. 贮藏与清理

有时,当你在项目的一部分上已经工作一段时间后,所有东西都进入了混乱的状态, 而这时你想要切换到另一个分支做一点别的事情。 问题是,你不想仅仅因为过会儿回到这一点而为做了一半的工作创建一次提交。 针对这个问题的答案是 git stash 命令。

贮藏(stash)会处理工作目录的脏的状态——即跟踪文件的修改与暂存的改动——然后将未完成的修改保存到一个栈上, 而你可以在任何时候重新应用这些改动(甚至在不同的分支上)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 贮藏
git stash

// 查看贮藏列表
git stash list

// 应用
git stash apply
git stash apply stash@{0}

// 应用顶部记录并丢弃
git stash pop

// 丢弃
git stash drop
git stash drop stash@{0}

2. 子模块

当一个 git 项目包含子模块(submodule)时,直接克隆下来的子模块目录里面是空的。有两种方法解决:

2.1. 方法一

如果项目已经克隆到了本地,执行下面的步骤:

1
2
3
4
5
6
7
// 1. 初始化本地子模块配置文件
// 2. 更新项目,抓取子模块内容。
git submodule init
git submodule update
    
// 或者
git submodule update --init --recursive

2.2. 方法二

在执行 git clone 时加上 --recursive 参数,它会自动初始化并更新每一个子模块。例如:

1
git clone --recursive https://github.com/example/example.git

3. 标签

Git 中,标签(tag)是一个特别的分支,指向某个提交(commit)。它通常用于发布版本。

Git 的标签分为两种类型:轻量标签和附注标签。

3.1. 轻量标签

轻量标签(lightweight tag)仅仅是一个指向特定提交的引用,它不会存储任何额外的信息。

1
2
3
4
5
# 创建轻量标签
git tag {tag_name} {commit_id}

# 创建一个指向最新提交的轻量标签
git tag v1.0.0

3.2. 附注标签

附注标签(annotated tag)是存储在 Git 数据库中的一个完整对象,它有一个标签名,标签信息,标签签名等信息。

1
2
3
4
5
# 创建附注标签的命令
git tag -a {tag_name} -m "{commit}" {commit_id}

# 创建一个指向最新提交的附注标签
git tag -a v1.0.0 -m "Release version 1.0.0" HEAD

3.3. 查看标签

1
2
3
4
5
# 查看当前项目中的所有标签
git tag

# 查看某个具体标签的信息
git show {tag_name}

3.4. 推送标签

默认情况下,git push命令不会将标签推送到远程服务器,需要使用以下命令将标签推送到远程服务器:

1
2
3
4
5
# 将标签推送到远程服务器
git push origin {tag_name}

# 如果要一次性推送所有本地标签
git push origin --tags

3.5. 删除标签

1
2
3
4
5
# 删除本地标签
git tag -d {tag_name}

# 删除远程标签
git push origin :refs/tags/{tag_name}

3.6. 切换标签

1
git checkout {tag_name}

4. 分支

4.1. 创建分支

1
2
3
4
5
# 创建新分支并切换到该分支
git checkout -b <branchname>

# 切换分支命令
git checkout <branchname>

当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录。

4.2. 查看分支

1
2
3
4
5
6
7
8
# 查看所有分支
git branch

# 查看远程分支
git branch -r

# 查看所有本地和远程分支
git branch -a

4.3. 合并分支

1
2
# 将其他分支合并到当前分支
git merge <branchname>

4.4. 解决合并冲突

当合并过程中出现冲突时,Git 会标记冲突文件,你需要手动解决冲突。打开冲突文件,按照标记解决冲突。

1
2
3
4
5
# 标记冲突解决完成
git add <conflict-file>

# 提交合并结果
git commit

4.5. 删除分支

1
2
3
4
5
6
7
8
# 删除本地分支
git branch -d <branchname>

# 强制删除未合并的分支
git branch -D <branchname>

# 删除远程分支
git push origin --delete <branchname>

4.6. 切换分支

1
git checkout <branch-name>

5. 远程仓库

Git 是一个分布式版本控制系统,可用于管理和跟踪软件开发项目的历史更改。切换到新的远程 Git 仓库可以是在项目迁移到新的 Git 托管平台,或者是在当前项目中关联一个新的远程仓库。

5.1. 添加新的远程仓库

1
git remote add origin <new_remote_repository>

其中,origin是一个标识符,表示这个远程仓库。你可以选择不同的名字来代替它。<new_remote_repository>是新的远程仓库的URL地址。

5.2. 检查远程仓库列表

1
git remote -v

可以使用以下命令来检查项目中已有的远程仓库列表,该命令会显示远程仓库的名称和URL。确保你已经正确地添加了新的远程仓库。

5.3. 推送代码到远程仓库

1
git push -u origin master

-u 参数会将本地的 master 分支与远程 origin 仓库的 master 分支关联起来,以便以后只需要执行 git push 就可以进行推送。

5.4. 拉取和推送代码

1
2
3
4
5
# 拉取代码
git pull origin <branch_name>

# 推送代码
git push origin <branch_name>
本文由作者按照 CC BY 4.0 进行授权