打开/关闭搜索
搜索
打开/关闭菜单
通知
打开/关闭个人菜单
查看“Git使用教程”的源代码
来自Uotan Wiki · 刷机百科
查看
阅读
查看源代码
查看历史
associated-pages
页面
讨论
更多操作
←
Git使用教程
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
=== Git的由来: === Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理,也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper。 === 常见的代码托管平台: === [https://github.com Github] [https://gitlab.com Gitlab] [https://gitee.com Gitee] === Git 常见命令: === ==== git init ==== 在本地目录中初始化一个新的Git仓库 ==== git config ==== 用于配置用户的信息以及其他设置,在使用git之前您必须完成以下步骤。 <code>git config --global user.name "your username"</code> <code>git config --global user.email "your email"</code> 更改默认编辑器 <code>git config --global core.editor nano</code> ==== git clone ==== 用于将远程仓库的代码克隆到本地,以下是命令中各个参数的含义: <code><url></code> 克隆某个地址(url)的仓库,远程仓库的地址可以是本地的目录,也可以是例如github,giteee,gitlab一类的代码托管平台 <code>--depth=<number></code> 克隆仓库并且保留number条提交历史,number在此处即表达我们克隆的深度。 <code>-b <branch></code> 克隆指定分支下的仓库内容 例如我们要克隆<code>LineageOS</code>的内核源码,指定<code>lineage-21</code>分支,且仅保留最近一个提交,则需要输入: <code>git clone -b lineage-21 <nowiki>https://github.com/LineageOS/android_kernel_xiaomi_sdm845</nowiki> --depth=1</code> ==== git add ==== 添加某个文件,或者目录到暂存区,用于告诉git你需要将哪些文件的更改包含在下一次的提交(commit)之中添加一个或者多个文件到暂存区之中 <code>git add [file1] [file2]</code> 添加指定目录(文件)到暂存区,包括子目录: <code>git add [dir]</code> 添加当前目录下的所有文件到暂存区: <code>git add .</code> ==== git status ==== 查看当前仓库的状态,此时git会在你的终端输出以下内容 <p><em style="color: gray;">此处演示为英文,如果您的git终端输出为中文也是同理的</em></p> <pre> On branch master No commits yet Changes to be committed: (use “git rm --cached <file>...” to unstage) new file: makefile </pre> 输出内容分别为 <pre> 您目前所在的分支 目前的提交 需要更改的内容 新增的文件 修改的文件 删除的文件 </pre> ==== git commit ==== 用于将暂存区我们保存的更改文件添加到本地仓库,并且会生成一条提交(commit) 提交暂存区的更改到本地仓库 <code>git commit -m "message"</code> [注] message 可以是你的备注信息 提交暂存区中的指定文件到本地仓库 如果你没有使用上述<code>git add</code>命令暂存你的修改文件,可以使用 <code>git commit -a</code> 进行直接提交 ==== git checkout ==== * 用于分支切换 切换分支: <code>git checkout <branch-name></code> <code>git checkout <branch-name></code> 例如在您的仓库中有这几个分支: <pre> -> master (Default) backup test </pre> 您当前处于 master 分支,如果想要切换到test分支,我们可以使用 <code>git checkout test</code> * 用于检出文件 将指定的文件恢复到最新的提交状态,撤销你对其的更改 <code>git checkout -- <file></code> ==== git push ==== 用于将本地的分支版本上传到远程仓库并进行合并 <code>git push <remote-host-name> <local-branch-name>:<remote-branch-name></code> remote-host-name:远程主机名 local-branch-name:本地分支名 例如,当你的远程主机名为origin ,本地分支名为master,远程分支名为master时: <code>git push origin master:master</code> 例如,当你的rhost名为origin 本地分支名为master远程分支名为master时: 本地和远程分支名相同,上述命令可以简写为: <code>git push origin master</code> 当你的远程版本与本地版本有差异,无法直接push时,你可以使用--force 参数来进行强制推送 <code>git push --force origin master</code> --force 此处可以直接简单化为 -f 如果你想要删除主机内的某个分支,你可以使用--delete参数 <code>git push origin --delete <branch-name></code> ==== git diff ==== 用于比较当前工作区与上一个版本之间的差异 例如:(此处仅做不恰当举例,Makefile不是这样乱写的) <pre> diff --git a/makefile b/makefile index fbb8c85..d65c7eb 100644 --- a/makefile +++ b/makefile @@ -1 +1,2 @@ 114514 +1919180 </pre> ==== git log ==== 用于查看提交的历史 例如当你进行一次提交之后,执行 <code>git log</code>终端会输出 <pre> commit 3a5b0d12f471418b13f2baf5e9e4c112a5e804a8 (HEAD -> master) Author: luluzzy <1054438588@qq.com> Date: Thu Feb 15 21:28:47 2024 +0800 initial commit: add makefile </pre> 这些输出分别为 <pre> commit sha1 hash: 针对你这个提交的 commit id Author: commit 作者名称 <you@example.com> Date: commit 日期 commit: 名称 </pre> 关于sha1_hash的介绍请看这里<ref>生成这个hash值,它是对那个commit是Git仓库中内容和头信息Header的一个校验和checksum。Linux kernel开创者和Git的开发者——Linus说,Git使用了sha1并非是为了安全性,而是为了数据的完整性;它可以保证,在很多年后,你重新checkout某个commit时,一定是它多年前的当时的状态,完全一摸一样,完全值得信任。在Git中,根据commit的sha1值40个十六进制数字进行了简单的划分目录,以前2位数字作为目录名,其下面是剩余38位数字组成的一个文件名</ref> 当有多次提交之后,如果我们想要翻之前的提交历史,难免会因为终端输出的内容过多而难以查看翻阅 此时我们可以使用<code>--online</code>参数来简化输出,此时仅会输出: sha1哈希值 + commit的名称 例如 <pre> 347595d (HEAD -> master) modify makefile 3a5b0d1 initial commit: add makefile </pre> ==== git cherry-pick ==== cherry-pick (遴选) 和它的名称一样,挑选一个我们需要的 commit 进行操作。它可以用于将在其他分支上的 commit 修改,移植到当前的分支。 如果我们想在我们正在开发的版本上,添加一个其他版本中的功能代码。就可以使用 cherry-pick ,将这个功能相关的 commit 提取出来,合入该版本。 <code>git cherry-pick <commit-id></code> 当我们执行完 <code>cherry-pick</code>操作之后,会自动生成一个<code>commit</code>以及对应新的<code>commit-id</code> 在顺利的情况下我们可以直接通过,但如果遇到代码等因为变量名,写法等不同的情况,<code>cherry-pick</code>大概率会报错,此时我们需要进行报错处理。 第一种方案是手动修改 我们可以先使用<code>git status</code>检查当前遴选时冲突的文件 然后 <code>git checkout --ours filename</code> 然后按照提交的修改内容进行手动修改 随后使用<code>git add</code>命令将文件重新加入暂存区 再使用 <code>git cherry-pick --continue</code> 命令让 cherrypick 操作继续执行。 第二种方案是直接退出<code>cherry-pick</code>进程,一般适用于冲突文件实在太多了难以按照方案一处理的情况。 需要注意的是,如果您当前正在遴选的提交在该分支已经存在也会冲突,在这种情况下,您需要解决冲突并手动解决问题。 <code>git cherry-pick --abort</code> ==== git fetch ==== git fetch 命令用于从远程获取仓库。 ==== git merge ==== <code>git merge</code>是用来把分叉的提交历史放回到一起(合并)的方式。 git merge命令用来将你之前使用git branch命令创建的分支以及在此分支上独立开发的内容整合为一个分支。 本 ==== git pull ==== 用于从远程获取代码并合并本地的版本。 <code>git pull</code>其实就是<code>git fetch</code>和<code>git merge FETCH_HEAD</code> 的简写。 格式如下: <code>git pull <remote-host-name> <remote-branch-name>:<local-branch-name></code> ==== git rebase ==== 用于需要修改历史上某一项commit <code>git rebase -i HEAD~<commit number></code> commit number就是从头部往前数的commit数量。执行后会弹出你在git config内配置的编辑器,若未配置则是默认,vim居多。然后就可以看见一堆commit前面有pick字样。可以将pick替换为你想要的操作。 有以下操作: 1.edit,顾名思义编辑此commit,替换完保存后请修改内容,使用<code>git add</code>或vscode,github desktop将修改文件添加到暂存区,之后命令行执行<code>git commit --amend</code>这样commit就修改成了 2.squash,合并几个提交,确认一个父提交,将要合并的commit,从下向上替换字符串,会从下向上合并(方位指的是<code>git rebase</code>后弹出的编辑器) 3.drop,需要移除的commit ==== git subtree ==== 子树,在Android开发中多用于Kernel侧更改,如跟踪audio模块等 <code>git subtree add --prefix=<目录> <仓库地址> <远程分支></code> 如果需要更新远程库时 <code>git subtree pull --prefix=<目录> <仓库地址> <远程分支></code> ==== git submodule ==== ===== 子模块功能的概述 ===== <code>git submodule</code>允许在自己的Github仓库里加入别人的github仓库,作为自己仓库的子仓库(即submodule)。 为什么我们会需要使用子模块?当我们维护一个项目时有可能遇到以下情况,例如维护某款机型的KernelSU内核,我们需要将KernelSU导入至我们的内核源码中,如果我们直接clone进去容易带来一个问题,如果KernelSU更新了怎么办?此时我们便可以使用子模块来解决这个问题 <code>git submodule</code>允许在git仓库里存放别人仓库的url,作为自己的子模块,其核心内容是在Git仓库里面加入一个<code>.gitmodules</code>文件,里面会记录各个submodule的名字,路径,以及对应链接。 ===== 加入子模块 ===== <code>git submodule add <url> <path></code> 此时 <code>.gitmodules</code>内会自动生成以下内容 [submodule "xxx"] path = xxx url = xxx ===== 初始化子模块 ===== <code>git submodule init</code> ===== 更新子模块 ===== <code>git submodule update</code> ==== 参考资料: ==== [1] 百度百科 -- Git:<nowiki>https://baike.baidu.com/item/GIT/12647237?fr=ge_ala</nowiki> [2] 菜鸟教程 -- Git基本操作:<nowiki>https://www.runoob.com/git/git-basic-operations.html</nowiki> [3] CSDN -- git merge 使用简介: <nowiki>https://blog.csdn.net/All_In_gzx_cc/article/details/125482617</nowiki>
返回
Git使用教程
。