Git在项目中的那些实操(持续更新...)
前言
Git是一个分布式版本控制系统,用于跟踪和管理项目的代码变化。它最初由Linus Torvalds开发,用于管理Linux内核的代码。Git具有以下特点:
分布式:每个开发者都可以拥有完整的代码仓库副本,包括完整的历史记录。这使得团队成员可以在没有网络连接的情况下独立工作,并且更容易处理分支和合并操作。
高效性能:Git设计简洁,执行速度快。它使用了一种称为”快照”的机制来存储文件的状态,而不是存储文件的差异。这使得Git在处理大型项目和大量文件时表现出色。
强大的分支和合并功能:Git鼓励频繁地创建和合并分支,使得团队可以同时进行多个任务和实验性开发。合并操作也相对简单,可以轻松地将不同分支的更改合并到一起。
完整的历史记录:Git记录了每次提交的详细信息,包括作者、日期、提交消息等。这使得团队可以追溯代码的演变历史,并轻松地回滚到之前的版本。
支持多种协作方式:Git支持多种协作方式,包括通过远程仓库进行协作、通过邮件列表或社交平台进行代码审查等。
Git已成为广泛使用的版本控制系统,被许多开发者和团队用于管理各种类型的项目。它提供了强大的工具和功能,使得代码的版本控制和协作变得更加高效和可靠。
功能:
一:下面呢是团队中协作开发时一些常见的Git
入门操作:
初始化仓库:使用
git init
命令在当前目录初始化一个新的Git仓库。克隆仓库:使用
git clone <repository>
命令克隆一个远程仓库到本地。添加文件:使用
git add <file>
命令将文件添加到暂存区,准备提交。提交更改:使用
git commit -m "commit message"
命令将暂存区的更改提交到本地仓库。查看状态:使用
git status
命令查看当前仓库的状态,包括已修改、已暂存和未跟踪的文件。查看历史:使用
git log
命令查看提交历史记录,包括提交者、日期和提交消息。创建分支:使用
git branch <branch-name>
命令创建一个新的分支。切换分支:使用
git checkout <branch-name>
命令切换到指定的分支。合并分支:使用
git merge <branch-name>
命令将指定分支的更改合并到当前分支。拉取更新:使用
git pull
命令从远程仓库拉取最新的更改。推送更改:使用
git push
命令将本地的更改推送到远程仓库。
以上操作就是开发过程中的基本流程了,但👇👇👇
二:在开发过程当中,难免会遇到的一些问题
例1:本该出现在新分支的代码改动,却在废弃的分支上开发半天!
假设现在你的
a
分支功能开发完成,合并到master
分支后。master
分支又有团队成员更新了很多代码。其实这时你应该在本地更新(git pull
)master
分支并且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 中的一个命令,用于选择性地将其他分支上的单个或多个提交应用到当前分支。它的应用场景和用法如下:
应用场景:
- 合并特定提交:当你只需要合并其他分支上的某个或某几个提交到当前分支时,可以使用
git cherry-pick
。 - 修复 bug:当你在其他分支上修复了一个 bug,并且希望将该修复应用到当前分支上时,可以使用
git cherry-pick
。
用法:
单个提交的 cherry-pick:
git cherry-pick <commit>
这将会将指定的
<commit>
应用到当前分支上。多个提交的 cherry-pick:
git cherry-pick <commit1> <commit2> ...
这将会按照指定的顺序将多个提交应用到当前分支上。
跨分支的 cherry-pick:
git cherry-pick <commit>..<commit>
这将会将两个提交之间(包括这两个提交)的所有提交应用到当前分支上。
需要注意的是,git cherry-pick
可能会引入冲突,因为它将其他分支上的提交应用到当前分支上。如果发生冲突,你需要手动解决冲突并提交修改。此外,git cherry-pick
会生成新的提交,这些提交与原始分支上的提交具有不同的 SHA 标识。
例2:推送代码到master后忘记切换分支直接在主分支上开发了
开发完之后,一顿操作猛如虎提交到
master
之后,却没有切换到开发分支~ 直接在master
分支开发了一堆新代码,你们会怎么解决?全部复制下来,然后把文件删除,最后切到新分支粘贴上去么?我相信一定有人这么干过
解决方法:
1.第一步直接将修改过的代码都挂载
> git stash
2.切换到新分支 ,将挂载的代码 【pop】 出来,就可以重新应用修改过的代码了!
> git checkout <分支名>
> git stash pop stash@{0}
关于git stash
:
git stash
命令用于临时保存你在工作目录中所做的更改,但是你暂时不想提交。它允许你在切换到其他分支或处理其他任务时,不必提交尚未完成的更改。
当你运行git stash
时,Git会保存你的本地修改,并将工作目录恢复到最后一次提交的状态。保存的更改被存储在一个新的stash中,你可以随后根据需要应用或丢弃它们。
以下是使用git stash
的基本工作流程:
- 在工作目录中对文件进行一些修改。
- 运行
git stash
来保存你的更改。 - Git会将工作目录恢复到最后一次提交的状态。
- 现在你可以切换分支或执行其他任务。
- 当你准备继续处理已保存的更改时,使用
git stash apply
来重新应用最近的stash。 - 如果你有多个stash,可以通过提供stash引用来指定要应用的stash。
- 或者,你可以使用
git stash pop
来应用最近的stash并从stash列表中删除它。 - 如果你不再需要某个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 协议》,转载必须注明作者和本文链接
推荐文章: