git基础

2023-05-16

1.git的相关配置

git自带一个git config工具来帮忙配置变量,git中这些变量存储在3个不同的位置并且有相关命令进行配置,如下:

  1. git config --system:存储在 /etc/gitconfig 中,系统中每个用户都会读取该文件中的变量。
  2. git config --global:存储在 ~/.gitconfig~/.config/git/config 中,只针对当前用户。
  3. git config --local:存储在当前仓库的git目录中的config文件(即 .git/config)。

注意:每个级别会覆盖上一个级别的配置。
git config使用例子:git config --global user.name “John Doe”。

查看所有的配置以及它们所在的文件

  1. git config --list --show-origin

检查配置信息:

  1. git config --list :列出所有 Git 当时能找到的配置。

来检查 Git 的某一项配置:

  1. git config <key>:例子 git config user.name。

2.获取git仓库

  1. 获取方式一:在已存在目录中初始化仓库。

步骤一:cd 指定目录
步骤二:执行 git init

  1. 获取方式二:克隆现有的仓库。

git clone 命令会自动设置本地 master 分支跟踪克隆的远程仓库的 master 分支(或其它名字的默认分支)

方案一:git clone https://github.com/libgit2/libgit2 (在本地创建名为libgit2的目录)。
方案二: git clone https://github.com/libgit2/libgit2 mylibgit (在本地创建名为mylibgit的目录)。

3.记录每次更新到仓库命令

  1. git status:查看哪些文件处于什么状态。

git status -s 命令或 git status --short :简短输出git status的内容。

  1. git add 文件/目录
    作用一:开始跟踪一个文件。
    作用二:把已跟踪的文件(已跟踪但是修改了的文件)放到暂存区。
    作用三:还能用于合并时把有冲突的文件标记为已解决状态。

  2. .gitignore 文件(非命令):此文件可以列出无需git管理的文件。

  3. git diff:显示哪些行发生了改变,尚未暂存的文件更新了哪些部分。

git diff --stagedgit diff --cached:若要查看已暂存的将要添加到下次提交里的内容。

  1. git commit:提交更新并且启动自己选择的文本编辑器来输入提交说明(git config --global core.editor 编辑器名字)。

git commit -m "说明文字" :将提交信息与命令放在同一行。
git commit -a:跳过使用暂存区域。
git commit --amend -m <message>:使用一次新的commit,替代上一次提交。
git commit <file1> -m <message>:提交暂存区的指定文件到本地仓库。

  1. git rm 文件名:从git中移除文件(直接物理删除 rm 文件并不会从git管辖中删除)。

git rm -f 文件名:强制删除当前文件(当前文件已暂存或修改过的情形)。
git rm --cached 文件名:从git仓库中删除但文件仍保留在磁盘中。
注意:文件名也可使用正则表达式。

  1. git mv file_from file_to:移动文件file_from到file_to。

也可用于改名操作,例如git mv README.md README相当于如下三条指令的作用结果:
mv README.md README
git rm README.md
git add README
注意:在使用其他工具重命名文件时,记得在提交前 git rm 删除旧文件名,再 git add 添加新文件名。

4.查看提交历史

  • git log:不传入任何参数的默认情况下,git log 会按时间先后顺序列出所有的提交,最近的更新排在最上面。 正如你所看到的,这个命令会列出每个提交的 SHA-1 校验和、作者的名字和电子邮件地址、提交时间以及提交说明

  • git log --patchgit log -p :显示每次提交所引入的差异(按 补丁 的格式输出)。

  • git log -n:限制日至条目的数量,例如 git log -2 只显示最近两次的提交。

  • git log --stat:查看每次提交的简略统计信息,例如在每次提交的下面列出所有被修改过的文件、有多少文件被修改了以及被修改过的文件的哪些行被移除或是添加了。 在每次提交的最后还有一个总结。

  • git log --pretty=[选项]:使用不同于默认格式的方式展示提交历史。
    例如:

  1. git log --pretty=oneline:将每个提示放在一行展示。
  2. git log --pretty=format:[自定义格式]:定制记录的显示格式。
    例如:
    git log --pretty=format:"%h - %an, %ar : %s"
    表示的输出格式为:
    简写哈希值 - 作者名字,作者修订日期,按多久以前的方式显示: 提交说明

更多关于git log请参考:git log

5.撤销操作

  1. git commit --amend撤销操作,这个命令会将暂存区中的文件提交。
    修复旧的提交(完全用一个 新的提交 替换旧的提交,旧有的提交从未存在过一样,它并不会出现在仓库的历史中)。
    例如,你提交后发现忘记了暂存某些需要的修改,可以像下面这样操作:

    $ git commit -m ‘initial commit’
    $ git add forgotten_file
    $ git commit --amend

    最终你只会有一个提交——第二次提交将代替第一次提交的结果。

  2. git reset HEAD 文件:取消暂存的文件。(被取消暂存的文件仍然是修改后的文件,只是没有暂存而以)。

  3. git checkout -- 文件名:撤销对文件的修改(对该文件的任何修改都撤销,恢复到或者刚克隆完的样子,或者刚把它放入工作目录时的样子)。

  4. git reset [--soft | --mixed | --hard] [HEAD]:git reset 命令用于回退版本,可以指定退回某一次提交的版本。

HEAD说明:
HEAD 表示当前版本
HEAD^ 上一个版本
HEAD^^ 上上一个版本
以此类推……
也可以用数字表示
HEAD~0 表示当前版本
HEAD~1 上一个版本
HEAD~2 上上一个版本
HEAD~3 上上上一个版本
以此类推……

  1. git reset --mixed [HEAD] --mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。
    原节点和Reset节点之间的所有差异都会放到工作目录中。
    例子:
    $ git reset HEAD^ # 回退所有内容到上一个版本
    $ git reset HEAD^ hello.php # 回退 hello.php 文件的版本到上一个版本
    $ git reset 052e # 回退到指定版本
  1. git reset --soft [HEAD]--soft 参数用于回退到某个版本。
    暂存区原有的内容也不变,只是原节点和Reset节点之间的所有差异都会放到暂存区中。
    例子:
    $ git reset --soft HEAD~3 # 回退上上上一个版本
  1. git reset --hard [HEAD]--hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交。
    例子:
    $ git reset --hard HEAD~3 # 回退上上上一个版本
    $ git reset --hard bae128 # 回退到某个版本回退点之前的所有信息。
    $ git reset --hard origin/master # 将本地的状态回退到和远程的一样
    注意:谨慎使用 –-hard 参数,它会删除回退点之前的所有信息。

6.远程仓库的使用

  1. 查看远程仓库:

git remote:列出你指定的每一个远程服务器的简写。 如果你已经克隆了自己的仓库,那么至少应该能看到 origin ——这是 Git 给你克隆的仓库服务器的默认名字

git remote -v:显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL。

  1. 添加远程仓库:

git remote add <shortname> <url>:添加一个新的远程 Git 仓库,同时指定一个方便使用的简写shortname。

例子: git remote add pb https://github.com/paulboone/ticgit
现在你可以在命令行中使用字符串 pb 来代替整个 URL。 例如,如果你想拉取 Paul 的仓库中有但你没有的信息,可以运行 git fetch pb
现在 Paul 的 master 分支可以在本地通过 pb/master 访问到

  1. 从远程仓库中抓取与拉取:

git fetch <remote>:访问远程仓库,从中拉取所有你还没有的数据。 执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看。必须注意 git fetch 命令只会将数据下载到你的本地仓库——它并不会自动合并或修改你当前的工作。 当准备好时你必须手动将其合并入你的工作。

  1. 推送到远程仓库:

git push <remote> <branch>:分享项目,将其推送到上游。

例子:将 master 分支推送到 origin 服务器(再次说明,克隆时通常会自动帮你设置好那两个名字):
$ git push origin master
注意:只有当你有所克隆服务器的写入权限,并且之前没有人推送过时,这条命令才能生效。否则要先抓取再合并。

  1. 查看某个远程仓库:

git remote show <remote>:remote可以使用简写名字,此命令查看远程仓库的url与跟踪分支信息。

可以看到的信息:

  1. 远程仓库的 URL 与跟踪分支的信息。
  2. 正处于 那个 分支。
  3. 列出了当你在特定的分支上执行 git push 会自动地推送到哪一个远程分支。
  4. 列出了哪些远程分支不在你的本地,哪些远程分支已经从服务器上移除了。
  5. 还有当你执行 git pull 时哪些本地分支可以与它跟踪的远程分支自动合并。
  1. 远程仓库的重命名与移除:

git remote rename 旧的仓库简写名字 新的仓库简写名字:修改一个远程仓库的简写名。

例子:$ git remote rename pb paul
值得注意的是这同样也会修改你所有远程跟踪的分支名字。 那些过去引用 pb/master 的现在会引用 paul/master

git remote remove 远程仓库简写名字:移除一个远程仓库,一旦你使用这种方式删除了一个远程仓库,那么所有和这个远程仓库相关的远程跟踪分支以及配置信息也会一起被删除。

7.打标签

像其他版本控制系统(VCS)一样,Git 可以给仓库历史中的某一个提交打上标签,以示重要。

  1. 列出标签信息和与之对应的提交信息
    git show 标签名字

  2. 列出标签
    git tag:列出已有的所有标签。
    git tag -lgit tag --list:按照通配符列出标签需要 -l 或 --list 选项。

例子:git tag -l "v1.8.5*"
列出以 "v1.8.5"开头的标签。

  1. 创建标签:Git 支持两种标签:轻量标签(lightweight)与附注标签(annotated)。

轻量标签很像一个不会改变的分支——它只是某个特定提交的引用。

而附注标签是存储在 Git 数据库中的一个完整对象, 它们是可以被校验的,其中包含打标签者的名字、电子邮件地址、日期时间, 此外还有一个标签信息,并且可以使用 GNU Privacy Guard (GPG)签名并验证。 通常会建议创建附注标签,这样你可以拥有以上所有信息。但是如果你只是想用一个临时的标签, 或者因为某些原因不想要保存这些信息,那么也可以用轻量标签。

  1. 创建附注标签

git tag -a 标签名字 -m "存储在标签中的信息":-a指定创建附注标签,-m指定存储在标签中的信息。
可以使用git show 标签名查看标签信息和与之对应的提交信息。

  1. 创建轻量标签

git tag 标签名:无需其它参数创建轻量标签。

  1. 后期打标签

git tag -a 版本号 校验和(或部分校验和):过去的提交打标签。过去提交的校验和可通过命令git log --pretty=oneline查看。

  1. 共享标签

git push 远程仓库简写名字 <tagname>:默认情况下,git push 命令并不会传送标签到远程仓库服务器上。 在创建完标签后你必须显式地推送标签到共享服务器上。

git push origin --tags:一次性推送很多标签,将会把所有不在远程仓库服务器上的标签全部传送到那里。现在,当其他人从仓库中克隆或拉取,他们也能得到你的那些标签。

  1. 删除标签

git tag -d 标签名字:删除掉你本地仓库上的标签。

git push <remote> :refs/tags/标签名字:删除远程仓库的标签,冒号前面的空值推送到远程标签名,从而高效地删除它。

git push 远程仓库简写名字 --delete 标签名字:删除远程标签

  1. 检出标签

git checkout 版本名字:查看某个标签所指向的文件版本,使你的仓库处于“分离头指针(detached HEAD)”的状态——这个状态有些不好的副作用:如果你做了某些更改然后提交它们,标签不会发生变化, 但你的新提交将不属于任何分支,并且将无法访问,除非通过确切的提交哈希才能访问。

因此,如果你需要进行更改,比如你要修复旧版本中的错误,那么通常需要创建一个新分支:git checkout -b 新分支名字 标签名字

8. git 别名

git config --global alias.别名 命令:git别名。

例子:$ git config --global alias.ci commit:ci 是 commit的别名
$ git config --global alias.unstage 'reset HEAD --':unstage 是 'reset HEAD’的别名。

9. git获取帮助

$ git help <verb>
$ git <verb> --help
$ man git-<verb>
$ git <verb> -h
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

git基础 的相关文章

  • git stash 删除最旧的存储(比如最旧的 5 个存储)

    如何在一个语句中删除最旧的存储 例如最旧的 5 个存储 而不是执行以下操作 git stash drop stash 3 git stash drop stash 4 git stash drop stash 5 git stash dro
  • gitlab 请求将分支 A 合并到开发中(落后 3 次提交)我应该担心吗?

    在 gitlab 中创建合并请求时 我经常收到一条消息 请求将分支 A 合并到开发中 x 提交落后 gitlab想告诉我什么 我应该担心还是需要修复某些东西 什么 一段时间后合并请求在项目中打开时 由于其他人合并了自己的更改 您尝试合并到的
  • 致命:不是 git 存储库(或任何父目录):.git [重复]

    这个问题在这里已经有答案了 当我尝试推送 github com 上的现有存储库时 当我输入命令时 网站提示我将其输入终端 我收到了以下致命错误消息 Not a git repository or any of the parent dire
  • 我在哪里? *(无分支)

    我已经熟悉了创建 合并和删除分支 我想知道我在哪里 这样我就不会将工作提交到错误的分支 我用git branch a看看我有哪些分支 我认为星号 显示我当前所在的分支 当我得到以下信息时 这意味着什么 no branch master or
  • 如何签出仅在“git ls-remote”中列出的分支?

    我遇到了无法切换到仅列出的分支的情况git ls remote 这是详细信息 我分叉了一个 github repoA 作为 repoB 创建了自己的分支并将其推送到 ComputerA 中的 repoB 在 ComputerB 中 我将分叉
  • 如何生成类似github的影响图?

    是否有一些程序 或者我错过的一些神奇的 git 插件 可以从 git 存储库获取影响图或类似的东西 而无需通过 github 就数据收集而言 我可以生成图表 我不确定从哪里开始编写自己的代码 我假设有一些标志我可以传递给 git log 来
  • 自动同步两个 git 存储库

    是否可以保持同步两个 Github 存储库 远程 的特定文件夹 有两个 github 存储库 repoA 和 repoB 这两个存储库都有名为 ABC 的文件夹以及其他独特的文件夹 如果repoA的文件夹ABC中的任何文件有更新 我想自动更
  • 清理远程 Git 分支

    我已经将 SVN 存储库移至 Git 可能由于多次克隆 我现在只剩下一堆看起来像这样的分支 BranchA origin BranchA remotes BranchA remotes origin BranchA remotes orig
  • git-svn 如何知道要提交到哪个分支?

    我的存储库是 SVN 我使用 git 进行所有开发 我们有一个标准布局 我用以下命令初始化了我的本地存储库git svn init s
  • 在 Windows 上使用 Git - 意外丢失了大量工作。我可以拿回来吗?

    我很困惑 我想我已经失去了几个小时的工作时间 我之前在 Git 中编辑了一个文件 我保存了它 但没有提交 我确实做了一些其他文件更改 并提交并推送了它们 然而 有一个文件被搞乱了 所以我单击了最后一次成功的提交 然后按了 回滚到此提交 令我
  • 将 Visual Studio 在线 Git 存储库集成到 Android Studio 1.0.2

    我正在使用 Visual Studio Online 进行开发过程 我想将我的 Android Studio 1 0 2 代码集成到其中 但是 据我所知 Android Studio 没有 TFS 插件 这就是为什么我想使用 Git 进行源
  • 更改先前提交的作者姓名:快进推送被拒绝

    我最近在 GitHub 上打开了一个存储库 我是 Git 新手 与新人一样 我使用默认名称和电子邮件进行提交 按照最佳菜鸟传统 我发现五次提交为时已晚 现在乐趣开始了 因为我开始搜索有关如何更改这些提交的作者和提交者名称的信息 美好的 我基
  • 为别名命令添加“git help”?

    我已经实现了一个 Git 命令并使用 git 别名将其连接到 Git 但是有没有办法连接 Git 帮助 我在 Windows 上运行 如果我发出git help mycmd我收到一个弹出窗口 告诉我 Git 找不到 git mycmnd h
  • GitPython 检查 git pull 是否更改了本地文件

    使用 GitPython 我只想在拉取后本地文件发生更改时才调用函数 例如 如果我在一台单独的计算机上进行推送 然后拉第一台计算机 它按预期工作 但不提供任何输出 理想的输出是已更改的文件列表 或者只是告诉我拉动是否有错误 没有拉动 因为分
  • Smartgit:自动插入提交消息

    有没有办法使用钩子脚本在 Smartgit 中自动插入提交消息 重击 如果用户提交了他的更改 我想预加载提交消息字段 我没有看到任何SmartGit配置 http www syntevo com smartgit documentation
  • 为什么 Git Bash 无法运行我的可执行文件?

    I am on git for windows https github com git for windows 吉特 巴什 我无法在命令行上运行可执行文件 Pedr Abc 07 MINGW64 c dev ls sqlite3 exe
  • 在 python 中找不到 git 可执行文件

    我试图使用访问密钥克隆 git 存储库 但是当我尝试运行它时 它抛出一个异常 说找不到 git 可执行文件 但我已经安装了 git 并且 in it py 显示了正确的路径 C Program Files Git bin 我还安装了 git
  • git merge --squash 和 gitcherry-pick 有什么区别?

    如果我在标准的主功能工作流程中工作 那么将功能分支压缩到主功能分支和将其挑选到主功能分支之间有什么区别 分支示例 m1 m2 master f1 f2 feature 我认为两者都有相同的输出 即 m1 m2 m3 master f1 f2
  • 使用nodegit切换分支/标签

    我整个早上都在尝试打开现有的存储库并使用 nodegit 更改分支或标签 文档内容很丰富 但似乎已经过时了 关于我做错了什么有什么想法吗 var NodeGit require nodegit var open NodeGit Reposi
  • gerrit - git(pull、checkout、cherrypick)的用途是什么?

    在 Android 的 gerrit ex 中 link https android review googlesource com c 109934 要下载补丁 我看到4个选项 回购下载 checkout pull 择优挑选 它们之间有什

随机推荐

  • Virtualbox加载虚拟机镜像

    启动虚拟机 打开这个文件夹 双击蓝色图标 会自动开启virtualbox虚拟机 并加载当前镜像 必须保证当前镜像文件所在全部路径都没有中文 建议启动Virtualbox时使用单击右键 gt 管理员方式运行 配置镜像参数 选中镜像 点击设置
  • Docker基础命令

    目录 Docker命令格式 images命令 search命令 pull命令 rmi命令 run命令 ps命令 stop rm命令 启动redis 关闭防火墙 Docker命令格式 Docker命令的语法结构 docker 子命令 选项 d
  • MySQL数据库的应用

    数据库常见术语 DB Database 数据库DBMS Database Management System xff1a 数据库管理系统SQL Structured Query Language xff1a 结构化的查询语言 数据库的设计
  • List.Stream()各方法应用

    目录 List Stream流 stream 优点 xff1a 流 stream 的操作类型分为两种 xff1a list stream filter T gt boolean distinct sorted sorted T T gt i
  • Hibernate-Validator(数据校验框架)

    目录 1 Hibernate Validator 简介 2 项目中为什么要用校验框架 3 添加依赖 4 在实体类上添加对应注解 5 POST方法中应用 64 RequestBody 和 64 RequestParam区别 6 GET方法中应
  • @ApiLog编写spring日志打印注解

    目录 声明一个注解 64 interface 64 Target修饰注解 64 Retention修饰注解 64 Document修饰注解 64 Inherited修饰注解 编写 64 ApiLog的实现切面类 声明一个注解 基本元素 描述
  • OAuth 2 工作流程(转载)

    OAuth 2 工作流程 介绍 可用的工作流程 网络应用程序流程 移动应用流程 旧版应用程序流程 后端应用流程 刷新令牌 ALL 定义令牌 令牌保护程序和所需的凭据 xff08 一 xff09 在每个请求上定义 Try Catch Toke
  • 23种设计模式

    目录 一 什么是设计模式 二 设计模式的三大分类及关键点 三 设计模式的几种原则 四 设计模式关系 一 什么是设计模式 设计模式 xff08 Design pattern xff09 是解决软件开发某些特定问题而提出的一些解决方案也可以理解
  • 判断浮点数是否相等以及CompareTo()的使用

    目录 CompareTo 比较字符串类型 如何判断两个浮点数是否相等 xff1f CompareTo 比较字符串类型 1 返回参与比较的前后两个字符串的ASCII码的差值 xff0c 如果两个字符串首字母不同 xff0c 则该方法返回首字母
  • Windows环境下使用vnc远程桌面连接Linux

    VNC官网 xff1a https www realvnc com en connect download viewer VNC包括服务器端和客户端 xff0c 最终需要实现从Windows上使用vnc客户端能够远程连接到Linux xff
  • 12c容器数据库相关操作:登录12c(容器数据库)、如何在oracle 12c中创建普通用户、 ORACLE 12C之CDB与PDB 、修改pdb名称

    一 登录12c 容器数据库 sqlplus as sysdba SQL gt show pdbs CON ID CON NAME OPEN MODE RESTRICTED 2 PDB SEED READ ONLY NO 3 XINBAOGG
  • 程序员没有项目经验,如何写出漂亮的简历

    前言 国庆假期已经结束啦 xff08 文末送福利 xff09 已经嗨完了7天7夜 有些人还没从假期中醒过来 却也有人高兴不起来 因为在这个 金九银十 一些同学还没找到满意的工作呢 特别是对于没有工作经验的应届生来说 做出一份可以进面试的简历
  • 我用Python写了个金融数据爬虫,半小时干了组里实习生一周的工作量

    前言 最近 xff0c 越来越多的研究员 基金经理甚至财务会计领域的朋友 xff0c 向小编咨询 xff1a 金融人需要学Python么 xff1f 事实上在2022年 xff0c 这已经不是一个问题了 Python已成为国内很多顶级投行
  • 程序员必读的10本经典书(含资源)建议收藏

    这是本文的目录 前言01 代码整洁之道 02 程序员的自我修养 03 程序员修炼之道 04 计算机程序的构造与解释 05 编程珠玑 06 程序是怎么跑起来的 07 自学是门手艺 08 Python编程 09 黑客与画家 10 图解 HTTP
  • 小米只能进fastboot和rec救砖

    Bl锁已解 xff0c 手机变砖 xff0c 只能进fastboot和rec模式 xff0c 我们通常有以下方式解决 1 如果你是因为动了某个分区镜像而导致变砖的 xff0c 可以到手机官方网站寻找对应版本刷机包提取动过的镜像 xff0c
  • C#开发串口调试助手的详细教程

    一 串口助手是什么 xff1f 通过电脑串口 xff08 包括USB口 xff09 收发数据并且显示的应用软件 xff0c 一般用于电脑与嵌入式系统的通讯 xff0c 借助于它来调试串口通讯或者系统的运行状态 也可以用于采集其他系统的数据
  • 怎样使用类和对象——静态成员

    静态数据成员 用立方体类box定义两个对象 xff0c 引用不同对象中的静态数据成员 span class token macro property span class token directive hash span span cla
  • STM32CubeMX代码第一次烧录后无法再识别STM32

    本文记录的是我在烧录时出现的问题 xff0c 具体细节会因为使用的软件或者STM32不同而不同 在使用STM32CubeMX生成的代码 xff0c 经过keil5编写后 xff0c 使用usb接口烧录进STM32然后发现keil5中再也识别
  • 算法练习2之单链表求和

    笔试题目 xff1a 1 用单向链表表示十进制整数 xff0c 求两个正整数的和 如下图 xff0c 1234 43 34 61 1268 xff0c 注意 单向链表的方向 xff0c 不允许使用其他的数据结构 题目分析 xff1a 题目中
  • git基础

    1 git的相关配置 git自带一个git config工具来帮忙配置变量 xff0c git中这些变量存储在3个不同的位置并且有相关命令进行配置 xff0c 如下 xff1a git config system xff1a 存储在 etc