Git使用【中】
欢迎来到Cefler的博客😁
🕌博客主页:那个传说中的man的主页
🏠个人专栏:题目解析
🌎推荐文章:题目大解析3
目录
- 👉🏻分支管理
- 分支概念
- git branch(查看/删除分支)
- git checkout(切换分支)
- git merge(合并分支)
- 💥合并冲突
- 👉🏻分支管理策略
- Fast-forward 模式和非 Fast-forward 模式
- 分支策略
- 🙀bug分支
- 在dev分支上还在开发未提交,但master分支上出现bug了
- git stash
- 👉🏻远程操作
- 理解分布式版本控制系统
- 🏡远程仓库
- 新建远程仓库
- reame文件、issue模板文件、pull request模板文件
- 🥢克隆仓库(git clone)
- 1.HTTPS协议克隆
- 2.SSH协议克隆
- 😘向远程仓库推送(push)
- 🥘拉取远程仓库
- 忽略特殊文件(.gitignore)
- 配置命令别名
- 👉🏻双减号(--)和单减号(-)
👉🏻分支管理
分支概念
在 Git 中,分支(branch)是用于将版本库中开发的不同版本分开管理的一种方式。如果你想要开发一个新的功能或修复一个 bug,那么可以基于当前分支创建一个新的分支,然后在这个分支上进行修改和调试,当完成任务后,将这个分支合并回主分支中去。这种分支管理方式可以非常方便地实现多人协作开发、持续集成等。
以下是 Git 分支管理中常用的一些概念:
-
主分支(master):主分支是 Git 默认创建的分支。它通常用于存储稳定版本的代码。所有提交历史都会出现在主分支上。
-
开发分支(develop):开发分支是用于存放最新的开发版本的分支。它基于主分支创建,开发人员可以在这个分支上进行修改和添加新功能。
-
特性分支(feature branch):特性分支是用于实现单一特性或功能的分支。它们通常基于开发分支创建,并在完成特性开发后被合并回开发分支。
-
发布分支(release branch):发布分支是用于准备发布新版本的分支。它们基于开发分支创建,在测试阶段被使用,并在通过测试后被合并回主分支和开发分支。
-
热修复分支(hotfix branch):热修复分支是用于紧急修复 bug 的分支。它们基于主分支创建,修复后被合并回主分支和开发分支。
Git 分支管理的主要优点是可以帮助开发人员更好地组织和管理版本库中的代码,并不会对其他分支上的代码产生影响。同时,Git 的分支操作相对简单,使用方便。
在版本回退⾥,我们已经知道,每次提交,Git都把它们串成⼀条时间线,这条时间线就可以理解为是⼀
个分⽀。截⽌到⽬前,只有⼀条时间线,在Git⾥,这个分⽀叫主分⽀,即 master 分⽀。
再来理解⼀下HEAD,HEAD 严格来说不是指向提交,⽽是指向master,master才是指向提交的,所
以,HEAD 指向的就是当前分⽀
每次提交,master分⽀都会向前移动⼀步,这样,随着你不断提交,master分⽀的线也越来越⻓,⽽
HEAD只要⼀直指向master分⽀即可指向当前分⽀。
而分支就是在主分支的基础上再开辟一个新的分支,进行新的操作,最后任务完成,进行合并分支。
git branch(查看/删除分支)
当使用 Git 进行版本控制时,git branch
命令是非常有用的。git branch
用于查看、创建和删除分支。
以下是 git branch
命令主要用途的概述:
-
查看分支:运行
git branch
命令可以列出当前版本库中存在的所有分支,并标记出当前所在的分支。命令输出中以星号 (*
) 标记的分支表示当前所在的分支。 -
创建分支:使用
git branch <branch-name>
命令可以创建一个名为<branch-name>
的新分支。新分支将基于当前所在分支创建,并且初始时与当前分支指向同一个提交。 -
切换分支:通过
git checkout <branch-name>
命令可以切换到<branch-name>
分支。这样你就可以在不同的分支之间切换工作,进行不同的开发任务。 -
删除分支:使用
git branch -d <branch-name>
命令可以删除名为<branch-name>
的分支。删除分支前,你需要确保当前没有未合并的修改。请注意,如果分支上有未合并的修改,Git 会拒绝删除该分支。如果你确定要强制删除分支,可以使用-D
参数代替 -d 参数。
🌈当前分支下直接删除当前分支。因为如果你删除当前分支,那么就没有有效的分支指向你的当前工作进度,这可能会丢失一些未提交的修改。如果你想删除当前分支,你需要先切换到其他分支,然后再执行删除操作
-
重命名分支:运行
git branch -m <new-branch-name>
修改当前所在的分支的名称。 -
查看远程分支:通过
git branch -r
命令可以查看远程仓库中的分支列表。
git checkout(切换分支)
git checkout
命令在 Git 分支管理中起着关键作用。它主要用于切换分支、创建分支和撤销修改。下面是 git checkout
在分支管理中的几个常见用途:
-
切换分支:通过
git checkout <branch-name>
可以切换到指定名称的分支。例如,git checkout develop
将工作目录切换到名为 “develop” 的分支上。切换分支后,你可以在新分支上继续进行开发工作。 -
创建分支并切换:在
git checkout
命令中加上-b
参数,可以在切换分支的同时创建一个新分支。例如,git checkout -b feature-branch
将创建一个名为 “feature-branch” 的新分支,并将工作目录切换到该分支上。 -
撤销修改:使用
git checkout -- <file>
可以撤销对指定文件的修改。这个命令将会将文件恢复到最近一次提交的状态。如果不指定文件名,则会撤销所有未提交的修改。 -
切换到特定的提交:可以使用
git checkout <commit>
切换到指定的提交。这在需要查看历史提交的文件内容或进行旧版本的修复时非常有用。 -
切换到标签:使用
git checkout <tag>
可以切换到指定的标签。标签是版本库中的一个具名提交,可以用于标记重要的里程碑或发布版本。
git merge(合并分支)
git merge
命令在 Git 分支管理中用于合并分支。它的作用是将一个分支的修改合并到另一个分支,使得两个分支的修改都包含在一起。下面是 git merge
在分支管理中的几个常见用途:
下面是两个使用 git merge
命令的例子:
- 合并特性分支
假设你在开发一个新的功能,创建了一个名为 feature-branch
的特性分支。在完成特性开发后,需要将特性分支的修改合并到主分支上。
首先,切换到主分支:
git checkout master
然后,使用 git merge
命令将特性分支合并到主分支上:
git merge feature-branch
如果合并中存在冲突,Git 会提示冲突文件和行号,需要手动解决冲突。完成冲突解决后,再次提交合并结果即可。
- 合并远程分支
假设你正在与其他开发者协作,需要将远程分支合并到本地分支上。假设远程分支名为 remote-branch
,本地分支名为 local-branch
。
首先,从远程分支拉取最新代码:
git fetch origin remote-branch
然后,切换到本地分支:
git checkout local-branch
最后,使用 git merge
命令将远程分支合并到本地分支上:
git merge origin/remote-branch
这样就可以将远程分支的修改合并到本地分支上了。如果合并中存在冲突,需要手动解决冲突。
💥合并冲突
当你在 Git 中合并两个分支时,可能会遇到合并冲突。合并冲突发生在两个分支都对同一部分文件或代码进行了修改,并且 Git 无法自动决定应该使用哪个版本的修改。
以下是处理合并冲突的一般步骤:
-
合并分支:执行合并命令,比如
git merge
,将一个分支的修改合并到当前分支上。git merge branch-name
其中
branch-name
是要合并的分支的名称。 -
发生冲突:如果发生了合并冲突,Git 会在命令行输出提示信息,告知哪些文件存在冲突。
Auto-merging file.txt CONFLICT (content): Merge conflict in file.txt
-
解决冲突:打开冲突的文件,你会看到类似下面的标记:
<<<<<<< HEAD // 当前分支的修改 ======= // 要合并的分支的修改 >>>>>>> branch-name
这表示冲突的起点、当前分支的修改和要合并的分支的修改。根据你的需求,手动编辑代码,选择保留哪些修改或者做进一步的修改。
-
解决完所有冲突后,保存文件,并使用
git add
命令将解决后的文件标记为已解决。git add file.txt
-
完成合并:一旦所有冲突都解决并且文件已标记为已解决,使用
git commit
命令提交合并结果(提交很重要!!)。git commit
Git 会自动生成一个合并提交,包含解决冲突的说明和相关的提交哈希。
处理合并冲突需要注意以下几点:
- 仔细审查冲突的代码,确保修改不会导致功能错误或代码问题。
- 可以使用工具或编辑器的冲突解决功能来辅助解决冲突。
- 在解决冲突之前,请备份重要的文件或项目,以防止错误的修改对你的工作造成不可逆的影响。
处理合并冲突可能需要一定的经验和技巧,但通过谨慎和仔细处理,你可以成功解决冲突并完成合并操作。
👉🏻分支管理策略
Fast-forward 模式和非 Fast-forward 模式
在 Git 中,合并分支时存在两种模式:Fast-forward 模式和非 Fast-forward 模式。
- Fast-forward 模式:
- Fast-forward 模式是默认的合并模式。
- 在 Fast-forward 模式下,如果要合并的分支是当前分支的直接上游分支,Git 会简单地将当前分支指向最新提交的位置,形成一个线性的提交历史。
- Fast-forward 模式没有额外的合并提交,因此合并后的提交历史会比较简洁。
在这种 Fast forward 模式下,删除分⽀后,查看分⽀历史时,会丢掉分⽀信息,看不出来最新提
交到底是 merge 进来的还是正常提交的。
- 非 Fast-forward 模式:
- 非 Fast-forward 模式用于那些不能进行 Fast-forward 合并的情况,比如要合并的分支和当前分支之间有其他的提交。
- 在非 Fast-forward 模式下,Git 会创建一个新的合并提交,将两个分支的修改合并在一起,并形成一个新的提交节点。这样可以保留每个分支的所有历史记录。
- 非 Fast-forward 模式的合并会在提交历史中明确显示合并操作,更加清晰地展示了分支的合并流程。
切换到非 Fast-forward 模式需要使用 --no-ff
参数执行合并命令。例如:
git merge --no-ff branch-name
其中 branch-name
是要合并的分支的名称。通过添加 --no-ff
参数,即可强制使用非 Fast-forward 模式进行合并。
非 Fast-forward 模式的优点包括:
- 保留了每个分支的完整提交历史,更加清晰地追踪分支的演进和合并过程。
- 明确标记了每次合并操作,便于代码审查、问题定位以及跟踪变更来源。
- 具备了更好的可读性和可维护性,可以更方便地回溯和撤销合并操作。
注意,在使用非 Fast-forward 模式合并分支时,会产生一个新的合并提交。这样的提交历史可能会显得稍微复杂一些,但也提供了更详细的信息,特别是在多人协作开发或复杂的项目中会更有用。
🌻🌻
git log --graph --abbrev-commit
git log --graph --abbrev-commit
是一个常用的 Git 命令,用于以图形化方式展示提交历史。该命令将显示一个分支图,其中包含了提交节点和它们的连接关系。(abbreviation——缩略词)
执行 git log --graph --abbrev-commit
命令后,你会看到类似下面的输出:
* commit1 (HEAD -> branch1)
|\
| * commit2
| * commit3
|/
* commit4
这个简单的示例表示有两个分支:branch1
和默认分支(通常是 master
)。该输出显示了以下信息:
- 每个提交节点用一个星号
*
表示。 - 每个提交节点的哈希值被缩写为几个字符,使用
--abbrev-commit
参数指定缩写的长度。 - 在本例中,
commit1
是当前所在分支branch1
的最新提交,具有HEAD -> branch1
标签。 commit2
和commit3
是branch1
分支上的其他提交。commit4
是默认分支上的一个提交。
通过 git log --graph --abbrev-commit
命令,你可以更直观地查看提交历史,并了解分支之间的合并情况和提交的连接关系。这对于理解项目的演进和跟踪代码变更非常有帮助。
值得注意的是,--graph
参数用于显示提交历史的图形,--abbrev-commit
参数用于缩写提交哈希值。你可以根据需要修改这些参数或者使用其他命令选项来获取更多定制化的输出。
分支策略
在实际开发中,我们应该按照⼏个基本原则进⾏分⽀管理:
⾸先,master分⽀应该是⾮常稳定的,也就是仅⽤来发布新版本,平时不能在上⾯⼲活。
当我们想要开发一个新的功能,我们只能创建新的分支进行开发,当经过多次的测验与完善,最终将稳定的代码合并到主分支上,此时主分支才是稳定的,可供用户使用的。
🙀bug分支
Git 中的 “bug 分支” 并不是一个特定的分支类型,而是一种通用的术语,用于描述解决项目中出现的 bug 或问题所创建的分支。
当在项目中发现 bug 时,为了修复它,通常会采取以下步骤:
-
创建分支:首先,你可以基于当前的主分支(例如
master
分支)创建一个新的分支来处理 bug。可以为这个分支起一个有意义的名称,如bug-fix
、fix/bug-name
等。这个分支将成为你解决 bug 的工作区。git checkout -b bug-fix
-
解决 bug:在新创建的 bug 分支上,你可以进行代码修改、调试或其他必要的操作来修复 bug。你可以使用各种开发工具和调试技巧来帮助定位和解决问题。
-
提交修改:当 bug 修复完成后,将修改提交到 bug 分支。
git add . git commit -m "Fix bug: bug description"
-
测试和验证:确保在 bug 分支上的修复能够成功解决问题。你可以运行相关的测试用例、手动测试或者验证其他的途径来确认 bug 是否已经修复。
-
合并到主分支:当你确定 bug 修复成功后,可以将 bug 分支合并回主分支,以便将修复应用到主代码库中。
git checkout master git merge bug-fix
-
清理分支:一旦 bug 分支的修复已经合并到主分支,可以选择删除该 bug 分支。
git branch -d bug-fix
使用 bug 分支的好处包括:
- 隔离了 bug 修复过程,避免了对主分支的直接修改,从而减少了在修复过程中引入其他问题的风险。
- 允许团队成员并行处理多个 bug,并将每个修复独立地追踪、测试和验证。
- 通过合并 bug 分支,将修复应用到主代码库中,确保了修复被所有用户所使用。
总结来说,通过创建 bug 分支来解决项目中的 bug 是一个良好的开发实践。它提供了一种结构化的方式来处理和跟踪问题,并有效地管理修复过程。
在dev分支上还在开发未提交,但master分支上出现bug了
虽然在master上面会看到dev那边的修改(增添了I am coding…),但是其实影响不大,因为dev只是在工作区进行修改,也没有add、commit、分支合并,所以版本库中的代码还是没有变化的。
但是如果我们仍然不想在master分支上看到dev那边的修改。
我们可以用到一个新的命令git stash
,它可以将工作区上的代码先存储到stash中。
🗣注意:能使用git stash
的对象,前提是这个文件是被git追踪
的,什么是被追踪呢?就是进行过add操作,commit操作的文件。
那么这说来说去,跟我们修复Bug有什么关系呢?
刚刚我们这个问题的前提是,dev分支上还在开发未提交,但master分支上出现bug了
此时我们在dev分支上咔咔敲代码,这些代码还是在工作区上的,还未提交,我们想让dev的代码情况和master目前一样,但我们又不能删除现在写的代码,所以我们就可以用git stash将目前写的代码先存起来,后面修复完bug后,再取回来。而接下来,我们就可以进行修复bug了。
这一切的大致流程如下:
1.git stash
先存储dev分支上在工作区上写的代码
2.git checkout master
回到master分支上再创建一个新的分支fix_bug用来修改Bug,在fix_bug分支上修改完后记得add和commit
3.修改完bug后回到master分支,此时一定要记得合并fix_bug分支,此时master才会同步fix_bug上面的修改
4.此时我们在git checkout dev
回到dev分支,此时我们就要取回我们之前在dev工作区写的代码了,
我们可以用git stash list
查看有哪些存储的代码,然后git stash pop
可以拿取回存储的代码
此时代码就已经回来了,而后如果现在工作区的代码已经写完,我们可以在当前分支上进行add、commit了
5.此时回到master分支上,我们可以选择先在master上合并分支dev,但是这里并不推荐这么做,因为可能会出现合并冲突的问题,而如果要手动去改代码可能会出现Bug.
🍎而有个比较好的方案是:
第一步:我们可以采取先在dev分支上合并master,万一出现了合并错误,我们也只要在dev分支上修改代码,而不影响到master分支,等到多次测验稳定后,确认无合并错误和代码错误。
第二步:此时我们再回到master分支,将dev分支进行合并。
操作如下
出现合并冲突了,但没关系,我们直接在dev本地分支上进行解决合并冲突。
这样合并冲突就已经解决了,并且也成功将master合并到dev中了。
而此时我们就可以再回到master分支上将完善的dev分支合并回master分支了。
至此,我们的修复Bug就已经大功告成了🌸🌸🌸
接下里,再归纳一下git stash
的用法
git stash
Git stash 是一个非常有用的命令,可以让你暂存当前正在进行的工作,以便在稍后的某个时间点重新应用它。使用 Git stash 命令,你可以将当前的未加入暂存区或提交的变更保存到“临时存储区”(stash)中,然后返回到干净的工作状态,以便在其他任务上继续工作。
下面是使用 Git stash 的一些常见场景和命令示例:
-
暂存当前修改:运行
git stash save
(save可以省略不写)命令,可以将当前工作区中的所有变更保存到 stash 中。git stash save "Working on new feature"
-
查看 stash 列表:运行
git stash list
命令,可以列出所有存在的 stash 记录,包括它们的标识符、关联消息和创建时间等信息。git stash list
-
应用 stash:运行
git stash apply
命令,可以将最近的 stash 恢复到工作区。如果你有多个 stash 记录,则需要指定 stash 标识符(例如stash@{2}
)。git stash apply git stash apply stash@{0}
-
删除 stash:运行
git stash drop
命令,可以删除指定的 stash 记录。如果你不指定 stash 标识符,则默认删除最近的 stash 记录。git stash drop stash@{1} git stash drop
-
恢复并删除 stash:运行
git stash pop
命令,可以将最近的 stash 恢复到工作区并将其从 stash 列表中删除。如果你有多个 stash 记录,则需要指定 stash 标识符。git stash pop git stash pop stash@{2}
使用 Git stash 的优点包括:
- 它允许你在切换分支或处理其他任务之前轻松地暂存当前工作,而无需提交或取消变更。
- 它对于保存一些临时性的代码更改,等待后续开发需要进行调整和修改时非常有用。
- 它可以允许你在进度上进行实验,因为你可以保存未完成的任务,并在稍后恢复。
👉🏻远程操作
理解分布式版本控制系统
我们⽬前所说的所有内容(⼯作区,暂存区,版本库等等),都是在本地!也就是在你的笔记本或者
计算机上。⽽我们的 Git 其实是分布式版本控制系统!什么意思呢?
可以简单理解为,我们每个⼈的电脑上都是⼀个完整的版本库,这样你⼯作的时候,就不需要联⽹
了,因为版本库就在你⾃⼰的电脑上。既然每个⼈电脑上都有⼀个完整的版本库,那多个⼈如何协作
呢?⽐⽅说你在⾃⼰电脑上改了⽂件A,你的同事也在他的电脑上改了⽂件A,这时,你们俩之间只需
把各⾃的修改推送给对⽅,就可以互相看到对⽅的修改了。
分布式版本控制系统的安全性要⾼很多,因为每个⼈电脑⾥都有完整的版本库,某⼀个⼈的电脑坏掉
了不要紧,随便从其他⼈那⾥复制⼀个就可以了。
在实际使⽤分布式版本控制系统的时候,其实很少在两⼈之间的电脑上推送版本库的修改,因为可能
你们俩不在⼀个局域⽹内,两台电脑互相访问不了。也可能今天你的同事病了,他的电脑压根没有开
机。因此,分布式版本控制系统通常也有⼀台充当“中央服务器”的电脑,但这个服务器的作⽤仅仅
是⽤来⽅便“交换”⼤家的修改,没有它⼤家也⼀样⼲活,只是交换修改不⽅便⽽已。有了这个“中央服务器”的电脑,这样就不怕本地出现什么故障了(⽐如运⽓差,硬盘坏了,上⾯的所有东西全部丢失,包括git的所有内容)
🏡远程仓库
我们在上述中,已经知道了中央服务器这个概念了。
而我们现实生活中,充当着这一角色的,有我们耳熟能详的github和gittee,前者是国外的网站,后者则是国内的网站。
而接下来,我将主要演示gittee中的一些使用
新建远程仓库
这里介绍一下gitee中reame文件、issue模板文件、pull request模板文件
reame文件、issue模板文件、pull request模板文件
当使用 Git 进行团队协作或开源项目管理时,常用的三个文件是 README 文件
、Issue 模板文件
和 Pull Request 模板文件
。
-
README 文件:
README 文件通常是一个项目的入口文件,用于向其他开发者和用户介绍项目的概要信息、功能特点、安装指南和使用说明等。它以纯文本格式或使用标记语言(如 Markdown)编写,通常位于项目的根目录下,并提供必要的信息和链接。README 文件的内容可以包括但不限于以下内容:
- 项目名称、介绍和作者信息
- 安装和使用说明
- 示例代码或演示
- API 文档链接
- 贡献指南和许可证信息
- 常见问题解答(FAQ)
-
Issue 模板文件:
Issue 模板文件用于规范化和简化提交 Issue 的流程。它定义了创建 Issue 时需要填写的字段和模板,以便提供更准确的信息。通常,Issue 模板文件以 Markdown 或 YAML 格式编写,存放在项目的.github/ISSUE_TEMPLATE/
目录下。Issue 模板文件可以包含以下内容:
- Issue 的类型和标题
- 描述问题或功能请求的详细信息
- 复现步骤或相关代码
- 预期行为和实际结果
- 环境信息(操作系统、软件版本等)
使用 Issue 模板文件可以帮助项目维护者和贡献者更好地理解和处理问题,提高沟通效率。
-
Pull Request 模板文件:
Pull Request 模板文件用于定义创建 Pull Request 时需要填写的字段和模板。它能够引导开发者提供必要的信息,如修改的内容、关联的 Issue 等。通常,Pull Request 模板文件以 Markdown 或 YAML 格式编写,存放在项目的.github/PULL_REQUEST_TEMPLATE/
目录下。Pull Request 模板文件可以包含以下内容:
- 修改的概述和目的
- 关联的 Issue 编号
- 测试方法和验证步骤
- 提交的代码变更和影响范围
- 需要 Review 的人员
使用 Pull Request 模板文件可以使代码审查过程更加高效,减少开发者和维护者之间的理解偏差,并提供清晰的反馈和讨论。
总的来说
readme文件用来介绍项目的主要信息
issue文件用来提出要解决的问题
pull request 文件就是其它分支的合并提交请求,如果管理员同意了,则可以合并到master中
🥢克隆仓库(git clone)
1.HTTPS协议克隆
我们在gitee中创建好仓库后,可以复制HTTPS协议,然后在本地中用git clone HTTPS协议
命令创建一个远程仓库
2.SSH协议克隆
当我们直接复制SSH协议去克隆的时候。
此时会发现不能被创建。
主要原因是我们未在gitee上配置我们的SSH公钥,由于我们没有添加公钥到远端库中,服务器拒绝了我们的 clone 链接。
那么我们如何进行配置公钥呢?步骤如下;
1.创建SSH Key。在用户主目录下,看看有没有.ssh⽬录,如果有,再看看这个⽬录下有没有
id_rsa
和 id_rsa.pub
这两个⽂件,如果已经有了,可直接跳到下⼀步。如果没有,需要创建
创建SSH Key需要命令
ssh-keygen -t rsa -C "email.com"
这里已经有了id_rsa
和 id_rsa.pub
这两个⽂件就不用创建了
之后取个标题,就配置好一个公钥了。
😘向远程仓库推送(push)
法一;
我们需要先设置全局邮箱和全局用户
git config --global user.email "邮箱"
git config --global user.name "用户名"
有了这个铺垫,我们就可以进行commit、push 操作了
我们用SSH协议创建仓库后出现了这个问题。但我们只要git init
初始化仓库一下就可以解决问题
但是初始化之后,我们仍然会出现一些问题
我们这里没有远程仓库origin了,问题官方给出的解决方案如下
此时终于有origin了
推送成功!这⾥由于我们使⽤的是 SSH 协议,是不⽤每⼀次推送都输⼊密码的,⽅便了我们的推送操
作。如果你使⽤的是 HTTPS 协议,有个⿇烦地⽅就是每次推送都必须输⼊⼝令。
git push origin master:master//左边是本地分支,右边是远程分支
意思就是将本地分支推送到远程分支,但如果左右分支相同,右边的分支可以省略不写
总结一下就是:
git push <远程主机名> <本地分⽀名>:<远程分⽀名>
# 如果本地分⽀名与远程分⽀名相同,则可以省略冒号:
git push <远程主机名> <本地分⽀名>
🥘拉取远程仓库
使用 git pull
命令可以从远程仓库拉取最新的更新到本地仓库。具体操作如下:
-
确保你当前所在的目录是你的本地仓库目录。
-
运行以下命令拉取远程仓库的更新:
git pull <remote> <branch>
其中,
<remote>
是远程仓库的名称,比如origin
;<branch>
是要拉取的分支名称。例如,如果你要从名为
origin
的远程仓库的main
分支拉取更新,可以运行:git pull origin main
-
Git 会尝试将远程仓库的更新合并到当前所在的分支上。如果没有冲突,Git 会自动完成合并操作;如果有冲突,你需要手动解决冲突。
如果拉取成功且没有冲突,你的本地仓库就会被更新到远程仓库最新的状态。
值得注意的是,如果你在拉取前已经对本地仓库做了修改并且还未提交,Git 可能会报错并拒绝拉取。这时你需要先提交或撤销你的修改,然后再运行 git pull
。
另外,如果你只想查看远程仓库的更新而不进行合并,你可以使用 git fetch
命令。它会将远程仓库的更新下载到本地,但不会自动合并。你可以使用 git log
或其他命令查看下载的更新,然后根据需要进行合并操作。
忽略特殊文件(.gitignore)
.gitignore
文件是用来指定在 Git 仓库中需要被忽略的文件或目录。当你在项目中使用 Git 进行版本控制时,有些文件或目录可能不希望被纳入版本控制,例如编译生成的临时文件、日志文件、缓存文件等。通过使用 .gitignore
文件,你可以告诉 Git 忽略这些文件,使它们不会出现在你的版本历史中。
以下是一些关于 .gitignore
文件的重要信息和用法:
-
文件位置:
.gitignore
文件通常放置在项目根目录下。在这个文件中列出的规则将适用于整个仓库及其子目录。 -
规则格式:每行一个规则,以斜杠(/)开头表示目录,其他情况下表示文件。你可以使用通配符来匹配多个文件或目录,如
*.log
匹配所有扩展名为.log
的文件,build/
匹配build
目录及其内容。 -
注释:可以使用
#
符号添加注释,注释后的内容将被忽略。 -
模式匹配:支持简单的通配符模式,如
*
(匹配任意字符序列),?
(匹配单个字符),[abc]
(匹配字符a
、b
或c
),[0-9]
(匹配数字)等。 -
感叹号(!):如果某个文件被忽略,但你希望将其包含在版本控制中,可以在规则前添加感叹号。
以下是一个示例 .gitignore
文件的内容:
# 忽略编译生成的文件
build/
bin/# 忽略日志文件
*.log# 忽略临时文件
tmp/# 不忽略 README.md 文件
!README.md
这个 .gitignore
文件指示 Git 忽略 build/
和 bin/
目录下的所有内容,所有扩展名为 .log
的日志文件,以及根目录下的 tmp/
目录。但会保留 README.md
文件。
.gitignore
文件对于确保不必要的文件不会误入版本控制非常有用,并保持 Git 仓库整洁和高效。
git add -f
可以强制提交忽略型文件
配置命令别名
在 Git 中,你可以通过配置命令别名(alias)来简化常用的 Git 命令,提高工作效率。可以使用 git config
命令来配置别名。以下是几个常见的示例:
-
设置全局别名:
git config --global alias.<alias-name> <git-command> //git-command如果比较长最好用''包含起来
将
<alias-name>
替换为你想要设置的别名,<git-command>
替换为对应的 Git 命令。例如,将co
设置为checkout
的别名:git config --global alias.co checkout
接下来,你可以使用
git co
来代替git checkout
。 -
设置仓库级别别名:
如果你只想在当前仓库中使用别名,可以在仓库目录下运行相同的命令,去掉--global
参数即可。这样别名将仅在当前仓库中生效。 -
查看别名配置:
使用以下命令查看当前配置的别名:git config --get-regexp alias
一些常见的 Git 命令别名示例:
git st
代替git status
git br
代替git branch
git ci
代替git commit
git co
代替git checkout
git df
代替git diff
git lg
代替git log --oneline --decorate --all --graph
你也可以组合多个命令来定义一个别名。例如,定义一个别名 git up
来执行 git fetch
和 git rebase origin/main
命令:
git config --global alias.up '!git fetch && git rebase origin/main'
使用 git up
命令时,Git 会依次执行 git fetch
和 git rebase origin/main
。
通过配置命令别名,你可以根据自己的使用习惯和需要来简化 Git 命令,并提高工作效率。
👉🏻双减号(–)和单减号(-)
在 Git 命令中,--
(双减号)和 -
(单减号)都用于传递选项或参数。它们的作用如下:
-
--
(双减号):- 分离位置参数和选项参数:当命令中存在位置参数和选项参数时,使用
--
将它们分隔开,确保选项参数不会被误解为位置参数。例如:
这里的git diff -- somefile.txt
--
分离了diff
命令的选项参数和位置参数somefile.txt
。
- 分离位置参数和选项参数:当命令中存在位置参数和选项参数时,使用
-
-
(单减号):- 作为选项的前缀:在 Git 命令中,很多选项都以
-
开头,并且可以连续使用多个选项。例如,git log -n 5
中的-n
选项用于指定显示日志条目的数量。 - 作为缩写形式的前缀:一些常用的选项有单字符和多字符两种形式。单字符选项通常以单减号作为前缀,而多字符选项则以双减号作为前缀。例如,
-b
是-branches
的缩写形式,--branches
是其完整形式。
- 作为选项的前缀:在 Git 命令中,很多选项都以
需要注意的是,--
和 -
在不同的上下文中可能会有不同的作用。例如,在一些命令中,--
可能用于指定分支或文件名的结束标记,而 -
可能用于表示从标准输入读取数据。
在使用 Git 命令时,要根据具体的命令和选项来正确理解和使用 --
和 -
,并注意它们的作用范围和用途。可以通过查看 Git 的官方文档或使用 git help
命令来获取更详细的信息和示例。
如上便是本期的所有内容了,如果喜欢并觉得有帮助的话,希望可以博个点赞+收藏+关注🌹🌹🌹❤️ 🧡 💛,学海无涯苦作舟,愿与君一起共勉成长
相关文章:
Git使用【中】
欢迎来到Cefler的博客😁 🕌博客主页:那个传说中的man的主页 🏠个人专栏:题目解析 🌎推荐文章:题目大解析3 目录 👉🏻分支管理分支概念git branch(查看/删除分…...
Greenplum7一键安装
2023年9月底,Greenplum 发布了7.0.0版本,并于2023年10月03日开放了安装部署说明文档,现在快速尝鲜版的docker一键部署方式如下: mkdir /data/gpdb docker run -d --name greenplum -p 15432:5432 -v /data/gpdb:/data inrgihc/g…...
Springboo整合Sentinel
Springboo整合Sentinel 1.启动Sentinel java -jar sentinel-dashboard-1.8.6.jar2.访问localhost:8080到Sentinel管理界面(默认账号和密码都是sentinel) 3.引入依赖(注意版本对应) <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spr…...
python爬取csdn个人首页中的所有封面
#爬取csdn个人首页中的所有封面 import requests import json import reurlhttps://blog.csdn.net/community/home-api/v1/get-business-list? headers{User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safar…...
EasyHttp - 网络请求,如斯优雅
官网 项目地址:Github博客地址:网络请求,如斯优雅 OkHttp 另外对 OkHttp 原理感兴趣的同学推荐你看以下源码分析文章 OkHttp 精讲:拦截器执行原理OkHttp 精讲:RetryAndFollowUpInterceptorOkHttp 精讲:…...
【Java】Stream的基本使用
Stream特点 Stream的一系列操作组成了Stream的流水线, Stream流水线包含: 数据源: 这里的数据源可能是集合/数组, 可能是生成器, 甚至可能是IO通道(Files.lines)零个或多个中间操作: 中间操作会导致流之间的转化, 如filter(Predicate)一个终端操作: 终端操作会产生最终所需要的…...
idea Springboot 高校科研资源共享系统VS开发mysql数据库web结构java编程计算机网页源码maven项目
一、源码特点 springboot 高校科研资源共享系统是一套完善的信息系统,结合springboot框架和bootstrap完成本系统,对理解JSP java编程开发语言有帮助系统采用springboot框架(MVC模式开发), 系统具有完整的源代码和数据…...
机器学习算法基础--K-means应用实战--图像分割
目录 1.项目内容介绍 2.项目关键代码 3.项目效果展示 1.项目内容介绍 本项目是将一张图片进行k-means分类,根据色彩k进行分类,最后比较和原图的效果。 题目还是比较简单的,我们只要通过k-means聚类,一类就是一种色彩得出聚类之…...
CSS学习小结
css的两种使用方式: ①内嵌样式表 ②导入外部样式表(实际开发常用)<link href"...." rel"stylesheet"/> 选择器: ①标签选择器:通过标签种类决定 ②类选择器:class"..…...
数据挖掘实验(一)数据规范化【最小-最大规范化、零-均值规范化、小数定标规范化】
一、数据规范化的原理 数据规范化处理是数据挖掘的一项基础工作。不同的属性变量往往具有不同的取值范围,数值间的差别可能很大,不进行处理可能会影响到数据分析的结果。为了消除指标之间由于取值范围带来的差异,需要进行标准化处理。将数据…...
C++17中std::filesystem::directory_entry的使用
C17引入了std::filesystem库(文件系统库, filesystem library)。这里整理下std::filesystem::directory_entry的使用。 std::filesystem::directory_entry,目录项,获取文件属性。此directory_entry类主要用法包括: (1).构造函数、…...
C/C++跨平台构建工具CMake入门
文章目录 1.概述2.环境准备2.1 安装编译工具2.2 安装CMake 3.编译一个示例程序总结 1.概述 本人一直对OpenGL的3d渲染很感兴趣,但是苦于自己一直是Android开发,没有机会接触这方面的知识。就在最近吗,机会来了,以前一个做3D渲染的…...
【CFD小工坊】浅水方程的离散及求解方法
【CFD小工坊】浅水方程的离散及求解方法 前言基于有限体积法的方程离散界面通量与源项计算干-湿网格的处理数值离散的稳定性条件参考文献 前言 我们模型的控制方程,即浅水方程组的表达式如下: ∂ U ∂ t ∂ E ( U ) ∂ x ∂ G ( U ) ∂ y S ( U ) U…...
第十四章 类和对象——C++对象模型和this指针
一、成员变量和成员函数分开存储 在C中,类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象上 class Person {public:Person() {mA 0;}//非静态成员变量占对象空间int mA;//静态成员变量不占对象空间static int mB; //函数也不占对象空间&#…...
计算机竞赛 深度学习卫星遥感图像检测与识别 -opencv python 目标检测
文章目录 0 前言1 课题背景2 实现效果3 Yolov5算法4 数据处理和训练5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **深度学习卫星遥感图像检测与识别 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐…...
java web+Mysql e-life智能生活小区物业管理系统
本项目为本人自己书写,主要服务小区业主和管理人员。 e-life智能生活小区涉及多个方面的智能化和便利化服务: 1. 用户模块:包含基本的登入登出操作,查看个人信息中用户可以查看 自己的个人资料但不可以修改个人信息。 a) 用户…...
AttributeError: module ‘dgl‘ has no attribute ‘batch_hetero‘
DGLWarning: From v0.5, DGLHeteroGraph is merged into DGLGraph. You can safely replace dgl.batch_hetero with dgl.batch...
Vue项目搭建图文详解教程
版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 预备工作 请在本地创建文件夹用于存放Vue项目,例如:创建HelloWorld文件夹存放即将创建的Vue新项目。 创建Vue项目 首先,请在DOS中将目录…...
SpringMVC处理请求核心流程
一、前言 SpringMVC是一个基于Java的Web框架,它使用MVC(Model-View-Controller)设计模式来处理Web请求。在SpringMVC中,请求处理的核心流程主要包括以下几个步骤: 1、用户发送请求到前端控制器(Dispatche…...
SoloX:Android和iOS性能数据的实时采集工具
SoloX:Android和iOS性能数据的实时采集工具 github地址:https://github.com/smart-test-ti/SoloX 最新版本:V2.7.6 一、SoloX简介 SoloX是开源的Android/iOS性能数据的实时采集工具,目前主要功能特点: 无需ROOT/越狱…...
【知识点随笔分析 | 第五篇】简单介绍什么是QUIC
前言: 随着互联网的快速发展,传统的基于TCP的协议开始显现出一些局限性。TCP在连接建立和拥塞控制方面存在一定的延迟,这可能导致用户在访问网页、观看视频或玩网络游戏时感受到不必要的等待时间。而QUIC作为一种新兴的传输协议,试…...
vscode ssh 远程免密登录开发
存放代码的机器运行 sshd, vscode 所在机器保证可以通过 ssh 登录服务器vscode 机器通过 ssh-keygen 生成 ssh 公私钥对(已有可以忽略)将客户端的 id_rsa.pub 加入到服务器的鉴权队列 cat id_rsa.pub >> authorized_keysvscode 配置ssh登录即可.ctrlp, remote-ssh: open …...
辅助驾驶功能开发-测试篇(2)-真值系统介绍
1 真值系统概述 1.1 真值评测系统核心应用 快速构建有效感知真值,快速完成感知性能评估,快速分析感知性能缺陷。 主要应用场景包括: 1. 感知算法开发验证: 在算法开发周期中,评测结果可以作为测试报告的一部分,体现算法性能的提升。 2. 遴选供应…...
运行程序时msvcr110.dll丢失的解决方法,msvcr110.dll丢失5的个详细解决方法
在使用电脑的过程中,我们经常会遇到各种问题,其中之一就是 msvcr110.dll 丢失的问题。msvcr110.dll 是 Microsoft Visual C Redistributable 的一个组件,用于支持使用 Visual C 编写的应用程序。如果您的系统中丢失了这个文件,您可…...
已解决 Bug——IndexError: index 3 is out of bounds for axis 0 with size 3问题
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页: 🐅🐾猫头虎的博客🎐《面试题大全专栏》 🦕 文章图文并茂🦖…...
WEB3 solidity 带着大家编写测试代码 操作订单 创建/取消/填充操作
好 在我们的不懈努力之下 交易所中的三种订单函数已经写出来了 但是 我们只是编译 确认了 代码没什么问题 但还没有实际的测试过 这个测试做起来 其实就比较的麻烦了 首先要有两个账号 且他们都要在交易所中有存入 我们还是先将 ganache 的虚拟环境启动起来 然后 我们在项目…...
c++-vector
文章目录 前言一、vector介绍二、vector使用1、构造函数2、vector 元素访问3、vector iterator 的使用4、vector 空间增长问题5、vector 增删查改6、理解vector<vector< int >>7、电话号码的字母组合练习题 三、模拟实现vector1、查看STL库源码中怎样实现的vector2…...
十四天学会C++之第二天(函数和库)
1. 函数的定义和调用 在C中,函数是组织和结构化代码的关键工具之一。它们允许您将一段代码封装成一个可重复使用的模块,这有助于提高代码的可读性和维护性。 为什么使用函数? 函数在编程中的作用不可小觑。它们有以下几个重要用途…...
蓝桥杯每日一题2023.10.3
杨辉三角形 - 蓝桥云课 (lanqiao.cn) 题目描述 题目分析 40分写法: 可以自己手动构造一个杨辉三角,然后进行循环,用cnt记录下循环数的个数,看哪个数与要找的数一样,输出cnt #include<bits/stdc.h> using na…...
JavaScript系列从入门到精通系列第十二篇:JavaScript中对象的简介和对象的基本操作以及JavaScript中的属性值和属性名
文章目录 前言 一:对象分类 1:内建对象 2:宿主对象 3:自建对象 二:对象的基本操作 1:创建对象 2:向对象中添加属性 3:读取对象中的属性 4:修改对象中的属性 三…...
中文购物网站模板/百度企业网盘
2019独角兽企业重金招聘Python工程师标准>>> 看完了google的GFS论文,趁热打铁写下了一点点读后感 1.果然和HDFS设计一样2.比较擅长处理连续读大文件的情况,对于随机读和频繁读取小文件则有短板,这与GFS的目标有关,它的…...
家乡网站建设/网络营销策划的内容
前言废话: 在电脑上需要LINUX开发的时候,由于虚拟机无法直接连接到电脑主机的显卡,无法在LINUX上进行CUDA编程。所以如果需要在该电脑进行LINUX的CUDA开发,配置一个wsl就显得十分重要。 本次配置是在一台(刚装过vs c和…...
中小型网站建设流程/推广网络营销案例
养成好习惯,点个赞 再走;有问题,欢迎私信、评论,我看到都会回复的 以下是关于阶乘的题目,熟悉一下阶乘的各种玩法 文章目录编一个函数求n的阶乘,主函数进行相关运算for语句输出n的阶乘while语句输出n的阶乘…...
vs动态网站建设/seo教程 seo之家
kubespray(ansible)自动化安装k8s集群 https://github.com/kubernetes-incubator/kubespray https://kubernetes.io/docs/setup/pick-right-solution/ kubespray本质是一堆ansible的role文件,通过这种方式,即ansible方式可以自动化的安装高可用k8s集群,目前支持1.9. 安装完成后…...
无忧中英繁企业网站系统通用版/软文案例200字
产品人,就是去发现问题、定义问题及解决问题的人。 甚至,我们所有的人,所有的生活就是在解决问题! 这里将如何解决问题及解决问题的方法做一个梳理,参考了一个很多人未听说过的解决问题的系统化方法。 发现问题&…...
wordpress移动端音乐插件/百度文库官网入口
AJAX(Asynchronous Javascript And XML):异步的JS和XML前言:Ajax 是一种创建交互式网页的开发技术,在无需重新加载整个网页的情况下,能够对网页进行“局部更新”。以前传统的网页开发,因为没有A…...