发布于 2026-01-06 3 阅读
0

Git 工作流程 - 单人工作与团队工作、撤销错误、为开源项目做贡献……等等

Git 工作流程 - 单人工作与团队工作、撤销错误、为开源项目做贡献……等等

在本文中,我将介绍我使用 Git 时几乎所有操作的工作流程:

  • 基本 Git 命令
  • 设置远程仓库并推送到 GitHub
  • 在 Git 中撤销操作
  • 忽略 Git 中的某些内容
  • 用于新功能的 Git 分支
  • 单独工作与团队合作
  • 为开源项目做出贡献

Git 基本命令

这些命令将在每个项目中用到。

1)初始化 Git

git init <project-name>

2)将文件添加到暂存区

添加所有文件:

git add .

要添加特定文件夹中的所有文件:

git add src/posts/Git_Commands_Post

添加一个文件:

git add styles.css

要添加所有具有特定扩展名的文件(在本例中为所有 html 文件):

git add *.html

3) 在提交到 Git 之前,请检查暂存区是否正确。

git status

4) 将更改提交到 Git

git commit -m "A short message describing the changes here"

5) 推送到远程仓库(有关如何设置远程仓库,请参见下文)

git push

设置远程仓库并推送到 GitHub

首先我们需要在Github上建立代码仓库:

1) 访问 github.com
2) 登录或创建账户
3) 选择“新建”创建一个新的仓库
4) 输入你的仓库信息。我通常不勾选“添加 README 文件”、“添加 .gitignore 文件”和“选择许可证”复选框。
5) 点击“创建仓库”

现在我们需要将本地仓库连接到刚刚创建的Github仓库:

6)添加远程仓库

git remote add origin https://github.com/YourUsername/Your-remote-repo-name.git

7)确保我们在主分行。

git branch -M main

8) 将你提交的本地代码推送到 GitHub

git push -u origin main

在 Git 中更改用户名和电子邮件

git config --global user.name "Danny Adams"
git config --global user.email "my-email@gmail.com"
Enter fullscreen mode Exit fullscreen mode

在 Git 中撤销操作

从暂存区删除文件

以下命令仅从 Git 仓库中删除文件。本地工作目录中的文件副本将保持不变——这是通过添加相应--cached选项来确保的。

git rm --cached <filename>

要删除文件夹中的所有文件,请添加递归标志:

git rm --cached <filename> -r

回退到之前的只读提交

要查看特定提交时的情况,而无需重写历史记录或删除任何内容,我们可以简单地:

1)记录提交历史,并复制我们要回滚到的提交的 ID。

git log --oneline

2)回溯到之前的提交记录。

git checkout <commit_ID>

3)完成后,回到我们之前所在的地方。

git checkout main

撤销提交

撤销提交会创建一个新的提交,撤销特定提交中所做的更改。

假设我们想要撤销在以下分支的第二个提交中所做的更改:

Git 回滚之前的提交分支

使用 Revert 命令,会创建一个新的提交,撤销在 C2 中所做的更改 - 但 C2 仍然保留在历史记录中,因此如果我们决定再次需要这些更改,我们仍然可以返回并保留它们:

Git 回滚提交

我们来看一个例子。下面是我的项目中的 3 个提交记录——最新的提交记录在最上面:

Git提交日志

假设我只想撤销“创建 styles.css”提交所做的更改。我可以简单地撤销此提交:

git revert a432c9f

然后,Git 会在你的文本编辑器中打开一个文件(如果你使用的是 VS Code),并要求你为新的提交创建一条消息:

Git 回滚命令行

Git 回滚消息

默认情况下,提交信息为“还原已创建的 styles.css”,但您可以将其更改为任何您想要的内容。我通常保持默认设置。

如果您对消息满意,只需关闭文件,Git 就会添加新的提交,撤销“创建 styles.css”的更改。

但使用 revert 撤销操作的好处在于:提交历史记录仍然保留。

回滚后的提交历史记录

如您所见,“Created styles.css”提交仍然存在。“Revert”操作只是创建了一个新的提交,将“Created styles.css”中所做的更改撤销了。这比使用“Reset”(下一节将介绍)要安全得多,因为“Reset”会删除提交。

重置提交

重置提交会将时间线回溯到上一个提交,并永久删除该提交之前发生的所有提交。

Git 重置分支图

1)获取要回滚到的提交的 ID

git log --oneline

2)重置

git reset <commit_ID>

注意:所有代码更改仍将保留在工作区文件中,但它们将不会被提交。要从 Git 和工作区中移除这些更改,请使用:

git reset <commit_ID> --hard(非常危险——务必小心!)

告诉 Git 忽略某些文件

项目中的某些文件包含密码和密钥等私密信息。切勿将这些信息上传到 GitHub,这一点至关重要。此外,像 node_modules 这样的文件夹会占用大量磁盘空间,而且由于可以随时通过项目的 package.json 文件重新安装,因此无需将其上传到 GitHub。

.gitignore1)在项目根目录下创建一个文件
2)添加要忽略的文件夹和文件的名称:

node_modules
secret-password.txt
Enter fullscreen mode Exit fullscreen mode

务必在创建这些文件后立即将其添加到 .gitignore 文件中。但如果您不小心将它们提交到了 Git,可以使用以下命令取消跟踪它们:

1)从存储库中删除所有内容

git rm -r --cached .

2)重新添加所有内容

git add .

现在,除了 .gitignore 文件中的文件之外,所有文件都将被添加到暂存区。

3)承诺

git commit -m ".gitignore fix"

本地仓库已清理干净。将更改推送到 GitHub,即可在 GitHub 上看到更改生效。

Git 分支

一个常见的 Git 操作规范是始终保持主分支可部署状态。这意味着,每当您开发新功能时,都应该创建一个新分支并将代码提交到该分支。然后,一旦该功能完成,您就可以将其合并回主分支。

Git合并分支图

独自工作时

如果你是唯一一个为代码库做贡献的人,那么你可以安全地将一个功能合并到主代码库中,而无需创建拉取请求。

1)创建一个新分支并进入该分支。

git checkout -b <branch-name>

2)请在此分支中进行更改。根据需要多次添加并提交更改。

3) 将特性分支检出并合并到主分支。

git checkout main

git merge <branch-name> --no-ff

`no-fastforward` 标志会创建一个新的合并提交,并保留特性分支的历史记录。如果没有此标志,主分支将直接快进到特性的末尾,而不会创建新的合并提交。

在团队中工作时

假设有人将你添加到 Github 存储库中,这样你现在可以作为团队的一员做出贡献。

要做出贡献,你需要提交一个拉取请求(Pull Request)。拉取请求用于代码的沟通和审查,然后再将其合并到主分支。直接合并和通过拉取请求合并是相同的——唯一的区别在于,拉取请求会在 GitHub 上创建一个专门的讨论区——这使得团队成员可以在合并之前审查你的代码。

1)克隆 GitHub 仓库

git clone <repo-url>

2)确保我们的代码是最新的

在进行任何更改之前,务必确保本地副本与远程仓库保持同步,因为其他开发者可能已经做出了贡献。请从远程仓库拉取最新代码。

git pull origin main

3) 创建并检出到新分支

git checkout -b <branch-name>

4)进行所需的更改

5) 添加并提交更改

git add .

git commit -m "some message"

6) 将此分支中的代码推送到 GitHub 上的一个分支。

git push origin <name-of-branch-for-Github>

7) 创建拉取请求

前往 Github 仓库的主分支,然后点击“比较和拉取请求”。

8) 留下评论,详细说明你做了什么,然后“创建拉取请求”。

其他团队成员会收到一封邮件,请求将你的代码合并到主分支。他们可以看到更改、提交记录、留下评论,并且(如果满意)可以将代码合并到主分支。

功能分支一旦合并即可删除。

**但是,如果你还在开发特性分支的时候,有人修改了主分支怎么办?**

  1. git checkout main
  2. git pull origin main
  3. git checkout <feature-branch-name>
  4. 将最新的主分支合并到你的特性分支中

git merge main

现在您可以将其他开发者的最新更改合并到您的功能中。

注意:您可能需要解决合并冲突。这是正常现象,也是使用 Git 的一部分。

分支和贡献开源项目

如果你没有仓库的写入权限,但仍然想为它做贡献,你可以 Fork 该项目:

  1. 找到一个开源公共仓库
  2. 将此仓库 fork(创建副本到您自己的 GitHub 帐户)
  3. git clone <url-of-your-fork>
  4. 进行更改(也可以创建一个新分支来存放更改,然后将更改推送到新分支)。
  5. git add . git commit -m "message" git push origin main
  6. 前往你在 GitHub 上的 fork 版本,然后点击“新建 pull request”。
  7. “创建拉取请求”——这会将您的代码拉取到父仓库以供审核合并。您本人无法合并此请求——只有仓库所有者才有合并权限。

Git 速查表海报

我厌倦了查找常用的 Git 命令,也厌倦了在冗杂的信息中筛选。所以最近我制作了一张 Git 速查表海报,上面列出了 50 个常用的 Git 命令,贴在了办公室的墙上。

我办公室墙上贴着一张 Git 速查表海报

它采用厚实耐用的 A3 纸张,并具有哑光、吸光的表面。

在这里订购 Git 速查表海报

感谢阅读

希望对您有所帮助。

想了解更多我的信息,您可以:

👋

文章来源:https://dev.to/doabledanny/git-workflows-solo-vs-team-work-undoing-mistakes-contributing-to-open-source-and-more-2bda