Git在项目中的那些实操(持续更新...)

前言#

Git 是一个分布式版本控制系统,用于跟踪和管理项目的代码变化。它最初由 Linus Torvalds 开发,用于管理 Linux 内核的代码。Git 具有以下特点:

  1. 分布式:每个开发者都可以拥有完整的代码仓库副本,包括完整的历史记录。这使得团队成员可以在没有网络连接的情况下独立工作,并且更容易处理分支和合并操作。

  2. 高效性能:Git 设计简洁,执行速度快。它使用了一种称为” 快照” 的机制来存储文件的状态,而不是存储文件的差异。这使得 Git 在处理大型项目和大量文件时表现出色。

  3. 强大的分支和合并功能:Git 鼓励频繁地创建和合并分支,使得团队可以同时进行多个任务和实验性开发。合并操作也相对简单,可以轻松地将不同分支的更改合并到一起。

  4. 完整的历史记录:Git 记录了每次提交的详细信息,包括作者、日期、提交消息等。这使得团队可以追溯代码的演变历史,并轻松地回滚到之前的版本。

  5. 支持多种协作方式:Git 支持多种协作方式,包括通过远程仓库进行协作、通过邮件列表或社交平台进行代码审查等。

Git 已成为广泛使用的版本控制系统,被许多开发者和团队用于管理各种类型的项目。它提供了强大的工具和功能,使得代码的版本控制和协作变得更加高效和可靠。

功能:#

一:下面呢是团队中协作开发时一些常见的 Git 入门操作#

  1. 初始化仓库:使用 git init 命令在当前目录初始化一个新的 Git 仓库。

  2. 克隆仓库:使用 git clone <repository> 命令克隆一个远程仓库到本地。

  3. 添加文件:使用 git add <file> 命令将文件添加到暂存区,准备提交。

  4. 提交更改:使用 git commit -m "commit message" 命令将暂存区的更改提交到本地仓库。

  5. 查看状态:使用 git status 命令查看当前仓库的状态,包括已修改、已暂存和未跟踪的文件。

  6. 查看历史:使用 git log 命令查看提交历史记录,包括提交者、日期和提交消息。

  7. 创建分支:使用 git branch <branch-name> 命令创建一个新的分支。

  8. 切换分支:使用 git checkout <branch-name> 命令切换到指定的分支。

  9. 合并分支:使用 git merge <branch-name> 命令将指定分支的更改合并到当前分支。

  10. 拉取更新:使用 git pull 命令从远程仓库拉取最新的更改。

  11. 推送更改:使用 git push 命令将本地的更改推送到远程仓库。

以上操作就是开发过程中的基本流程了,但👇👇👇



二:在开发过程当中,难免会遇到的一些问题#

例 1:本该出现在新分支的代码改动,却在废弃的分支上开发半天!#

假设现在你的 a 分支功能开发完成,合并到 master 分支后。master 分支又有团队成员更新了很多代码。其实这时你应该在本地更新(git pullmaster 分支并且 git checkout 到一个新的分支(b)继续开发新功能。但你并没有,继续留在了 a 分支继续开发,这可能导致代码差异过大而产生代码冲突!

解决方法:

1.先将a分支的代码提交到暂存区
> git add .
> git commit -m'fix'

2.提交之后会有一个提交记录,查看提交记录,并将刚才提交的这个commit号复制下来
> git log 

3.更换到master切一个最新分支出来(b)
> git checkout master && git pull
> git checkout -b <新分支名>
> git cherry-pick <刚才复制的commit号>

操作之后你会发现a分支的更改内容被复制了一份到b分支,这样就可以继续开发了~

关于 git cherry-pick#

git cherry-pick 是 Git 中的一个命令,用于选择性地将其他分支上的单个或多个提交应用到当前分支。它的应用场景和用法如下:

应用场景:

  1. 合并特定提交:当你只需要合并其他分支上的某个或某几个提交到当前分支时,可以使用 git cherry-pick
  2. 修复 bug:当你在其他分支上修复了一个 bug,并且希望将该修复应用到当前分支上时,可以使用 git cherry-pick

用法:

  1. 单个提交的 cherry-pick:

    git cherry-pick <commit>

    这将会将指定的 <commit> 应用到当前分支上。

  2. 多个提交的 cherry-pick:

    git cherry-pick <commit1> <commit2> ...

    这将会按照指定的顺序将多个提交应用到当前分支上。

  3. 跨分支的 cherry-pick:

    git cherry-pick <commit>..<commit>

    这将会将两个提交之间(包括这两个提交)的所有提交应用到当前分支上。

需要注意的是,git cherry-pick 可能会引入冲突,因为它将其他分支上的提交应用到当前分支上。如果发生冲突,你需要手动解决冲突并提交修改。此外,git cherry-pick 会生成新的提交,这些提交与原始分支上的提交具有不同的 SHA 标识。



例 2:推送代码到 master 后忘记切换分支直接在主分支上开发了#

开发完之后,一顿操作猛如虎提交到 master 之后,却没有切换到开发分支~直接在 master 分支开发了一堆新代码,你们会怎么解决?全部复制下来,然后把文件删除,最后切到新分支粘贴上去么?我相信一定有人这么干过:joy:

解决方法:

1.第一步直接将修改过的代码都挂载
> git stash 

2.切换到新分支 ,将挂载的代码 【pop】 出来,就可以重新应用修改过的代码了!
> git checkout <分支名>
> git stash pop stash@{0}

关于 git stash:#

git stash 命令用于临时保存你在工作目录中所做的更改,但是你暂时不想提交。它允许你在切换到其他分支或处理其他任务时,不必提交尚未完成的更改。

当你运行 git stash 时,Git 会保存你的本地修改,并将工作目录恢复到最后一次提交的状态。保存的更改被存储在一个新的 stash 中,你可以随后根据需要应用或丢弃它们。

以下是使用 git stash 的基本工作流程:

  1. 在工作目录中对文件进行一些修改。
  2. 运行 git stash 来保存你的更改。
  3. Git 会将工作目录恢复到最后一次提交的状态。
  4. 现在你可以切换分支或执行其他任务。
  5. 当你准备继续处理已保存的更改时,使用 git stash apply 来重新应用最近的 stash。
  6. 如果你有多个 stash,可以通过提供 stash 引用来指定要应用的 stash。
  7. 或者,你可以使用 git stash pop 来应用最近的 stash 并从 stash 列表中删除它。
  8. 如果你不再需要某个 stash,可以使用 git stash drop 加上 stash 引用来删除它。

记得使用 git stash list 来查看所有 stash 及其引用的列表。

请注意,git stash 是一个强大的工具,但是使用时要谨慎,并理解其影响。



例 3:提交了致命错误到 master 分支#

举个栗子,情况可能什么都有:本地 composer 一个新包时,不小心把其他包的版本更改了!而且未经过任何测试就提交到 master!! 这东西上线想想就害怕~(可能版本不兼容,导致服务直接崩掉)

解决方法:

1.将最近的一次提交从当前分支中移除,并将修改保留在工作区
> git reset HEAD~

2.如果你提交多次..那就将指定的提交及其之后的所有提交从当前分支中移除,并将修改保留在工作区
> git reset <commit号>

关于 git reset#

git reset 是 Git 中的一个命令,用于撤销提交、移动分支指针或重置工作区到指定状态。它的应用场景和用法如下:

1. 撤销提交:

  • git reset HEAD~:将最近的一次提交从当前分支中移除,并将修改保留在工作区。
  • git reset <commit>:将指定的提交及其之后的所有提交从当前分支中移除,并将修改保留在工作区。

2. 移动分支指针:

  • git reset <commit>:将当前分支的指针移动到指定的提交,丢弃该提交之后的所有提交。默认情况下,使用 --mixed 选项,修改会保留在工作区。
  • git reset --soft <commit>:与上述相同,但修改也会保留在暂存区。
  • git reset --hard <commit>:与上述相同,但修改会被完全丢弃,恢复到指定提交的状态。

3. 重置工作区:

  • git reset:不带任何参数时,默认为 --mixed,将工作区和暂存区回滚到上一次提交的状态。
  • git reset --soft:将工作区保持不变,只重置暂存区到上一次提交的状态。
  • git reset --hard:将工作区和暂存区都重置到上一次提交的状态,丢弃所有未提交的修改。

需要注意的是,git reset 是一个潜在危险的命令,因为它会改变 Git 的历史记录。在使用之前,请确保了解其影响,并谨慎操作。

本作品采用《CC 协议》,转载必须注明作者和本文链接
Reality
本帖由 Summer 于 1年前 加精
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 3

git stash 特别好用

1年前 评论
飞飞鱼 (楼主) 1年前

haha,例 1 的情况我比较倾向于在当前分支下直接 rebase 远程分支

1年前 评论