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 于 7个月前 加精
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 3

git stash特别好用

7个月前 评论
飞飞鱼 (楼主) 7个月前

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

6个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!