📜  如何变基初始提交 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 14:52:11.306000             🧑  作者: Mango

如何变基初始提交 - Shell/Bash

当我们开发一个新的项目时,通常会从一个初始提交开始。在这个初始提交中,可能会包含一些不必要的或错误的代码。但在该项目的后续开发过程中,我们不希望这些代码和提交记录被保留下来。这时,变基(initial rebase)是一个非常有用的工具。

在本文中,我们将介绍如何使用Shell/Bash中的git命令进行变基。

步骤
1. 创建一个新的Git仓库

首先,我们需要创建一个新的Git仓库。可以使用以下命令:

$ mkdir new-project
$ cd new-project
$ git init
2. 添加文件并进行第一次提交

将你的项目文件添加到仓库中,并进行第一次提交:

$ git add .
$ git commit -m "Initial commit"
3. 基于初始提交创建一个新的开发分支

现在我们将基于初始提交创建一个新的开发分支:

$ git checkout -b dev
4. 删除初始提交中的不必要代码

在新的开发分支上,你可以删除你不需要的文件和代码。例如,我们可以删除test.sh文件和该文件中的一段不必要的代码:

$ rm test.sh
$ vi main.py

main.py中我们删除了以下代码:

print("This is a test")
5. 变基

一旦我们予以删除了不必要的代码,我们就可以进行变基了。要进行变基,我们需要同时使用--root--onto参数,以指定新的提交(去除不必要代码的提交)应基于哪些提交:

$ git rebase --root --onto HEAD <commit-id>

在这里,<commit-id>是你要保留的最后一个提交的ID。你可以在Git日志中找到这个ID。如果我们没有在提交时添加任何标记/版本号,则最后一个提交的ID将是最旧的。

例如,如果我们的Git日志如下所示:

commit 65af8a2a2d24a08987ff2542e1d8d3e9bbafe056 (HEAD -> dev)
Author: John Doe <john.doe@example.com>
Date:   Fri Sep 27 12:37:55 2019 -0700

    Removed unnecessary code from main.py

commit 88cb8475ce5ab18e5857b0f96dd124393881b225
Author: John Doe <john.doe@example.com>
Date:   Fri Sep 27 11:43:50 2019 -0700

    Initial commit

我们可以看到,最后一个提交的ID是88cb8475ce5ab18e5857b0f96dd124393881b225。因此,我们可以通过以下命令进行变基:

$ git rebase --root --onto HEAD 88cb8475ce5ab18e5857b0f96dd124393881b225
6. 将变基结果提交到开发分支

变基完成后,我们可以使用以下命令将变基后的提交提交到开发分支:

$ git checkout dev
$ git merge --ff-only <new-commit-id>

在这里,<new-commit-id>是变基生成的新提交的ID。可以在变基后使用以下命令获取该提交的ID:

$ git log -1
7. 删除旧的提交

最后一步是删除旧的提交。请注意,此操作可能会破坏该项目的历史记录,因此应该谨慎执行。在执行该操作之前,请确保所有协作的开发者都知道这个操作。

删除旧的提交可以使用以下命令实现:

$ git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch test.sh' --prune-empty --tag-name-filter cat -- --all

在这里,test.sh是你删除的文件的名称。

结论

变基是一个非常有用的工具,可以帮助你从你的项目中删除不必要的代码和提交记录。然而,它不应该被滥用。当你决定执行变基时,请确保所有开发者都知道这个操作,并确认该操作不会破坏其他开发者的工作。