Skip to content

git命令-清理中

git命令

目录

[toc]

分支管理命令:branch命令/checkout命令

  • 注意:我们在本地无法直接在clone下来的远程分支上做变更的,只能基于远程分支建本地分支后,才能创建commit

image-20231122211551922

恢复被删除的分支

image-20231122211912865

作者回复:好问题,可参考:https:可以再了解一下 git reflog 这个命令的作用。

重命名分支

bash

image-20220922232900942

image-20220922232918188

image-20220922232951897


  • gpt问答

git如何重命名分支?

在Git中,你可以使用以下命令来重命名分支:

git branch -m <old-branch-name><new-branch-name>

这个命令将会把 <old-branch-name>分支重命名为 <new-branch-name>

例如,如果你想把分支 "feature-1"重命名为 "feature-new",你可以运行:

git branch -m feature-1 feature-new

请确保你在重命名分支之前已经切换到其他分支,因为无法对当前所在的分支执行重命名操作。

如果你希望在远程仓库中也更新分支名字,你需要执行一些额外的步骤:

  1. 推送重命名后的本地分支到远程仓库:

    git push origin -u feature-new

    这将推送重命名后的分支到远程仓库,并将它与远程仓库中的同名分支关联起来。

  2. 删除远程仓库中的旧分支:

    git push origin --delete feature-1

    这将删除远程仓库中的旧分支。

请注意,如果其他人也在使用这个分支,他们需要更新他们的本地仓库,以反映出分支的重命名。他们可以通过执行以下命令拉取最新的分支信息:

git fetch --prune

这会更新他们的本地仓库,同时删除远程仓库中已经不存在的分支。


  • 再次gpt提问

<old-branch-name><new-branch-name>这2个参数哪个可以省略呢?

在Git中,git branch -m命令允许省略 <old-branch-name><new-branch-name>中的一个,但不可以同时省略。具体取决于你想要的操作:

  1. 省略 <old-branch-name>

    如果你只提供一个参数,Git 将当前所在的分支视为要重命名的分支。例如:

    git branch -m <new-branch-name>

    这将当前分支重命名为 <new-branch-name>

  2. 省略 <new-branch-name>

    如果你只提供两个参数,Git 将假定你想要重命名当前所在的分支为指定的 <new-branch-name>。例如:

    git branch -m <old-branch-name><new-branch-name>

    这将 <old-branch-name>分支重命名为 <new-branch-name>

请注意,无论你省略哪个参数,都需要确保当前分支不是你要重命名的分支,或者在操作之前切换到其他分支。如果当前分支是你要重命名的分支,你需要在执行命令之前切换到其他分支。

推送:push命令

案例:强制推送:--force参数

如果远程主机的版本比本地版本更新,推送时 Git 会报错,要求先在本地做 git pull 合并差异,然后再推送到远程主机.这时,如果你一定要推送,可以添加参数 --force

这种场景一般出现在,当你进行了版本回退之后,想把回退后的版本重新推送到远程主机上。

img

如上图,做了一次版本回退之后,这里提示我远程分支更新,需要我做 pull 操作,如果这个时候你想继续推送的话使用如下命令

bash
# 将本地分支 main 强制推送到远程主机 origin 的 main 分支上:gitpush--forceoriginmain

标签:tag命令

给本地仓库和远程仓库打tag

测试成功。

要在git命令中打标签(tag),你可以使用git tag命令。下面是一个简单的示例:

  1. 首先,确保你已经进入了包含要打标签的仓库的目录。

  2. 使用以下命令来创建一个标签:

    git tag <tag名称>

    替换<tag名称>为你想要的标签名称。例如,你可以使用git tag v1.0创建一个名为"v1.0"的标签。

  3. 如果你想要给标签添加一个说明,可以使用-a选项和-m选项来创建一个带注释的标签,示例如下:

    git tag -a <tag名称>-m "<标签说明>"

    替换<tag名称>为标签名称,<标签说明>为该标签的说明文字。例如,你可以使用git tag -a v1.0 -m "发布版本1.0"来创建一个名为"v1.0"的标签,并附带说明文字"发布版本1.0"。

  4. 如果你只是在本地仓库中创建了标签,你还需要将它推送到远程仓库中。使用以下命令将标签推送到远程仓库:

    git push origin <tag名称>

    替换<tag名称>为你想要推送的标签名称。例如,你可以使用git push origin v1.0将名为"v1.0"的标签推送到远程仓库。

希望以上步骤能够帮助你成功地打标签并推送到git仓库。

查看本地仓库和远程仓库的tag命令

测试成功。

  • 要查看本地仓库中的标签,可以使用以下命令:
git tag

这将列出所有本地仓库中的标签。

image-20231017211742986

  • 要查看远程仓库中的标签,可以使用以下命令:
git ls-remote --tags origin

这将列出远程仓库中的所有标签。请注意,它会显示远程仓库的标签引用,而不是实际的标签列表。

image-20231017211828602

使用这两个命令,你可以分别查看本地仓库和远程仓库中的标签。

删除本地仓库和远程仓库的tag命令

测试成功。

要删除本地仓库中的标签,可以使用以下命令:

git tag -d <tag名称>

<tag名称>替换为你想要删除的标签名称。例如,如果你要删除名为"v1.0"的标签,可以运行以下命令:

git tag -d v1.0

这将从本地仓库中删除该标签。

要删除远程仓库中的标签,可以使用以下命令:

git push --delete origin <tag名称>

<tag名称>替换为你想要删除的标签名称。例如,如果你要删除名为"v1.0"的标签,可以运行以下命令:

git push --delete origin v1.0

这将从远程仓库中删除该标签。请注意,这不会删除本地仓库中的标签,如果你想要在本地仓库中删除标签,可以使用git tag -d <tag名称>命令。

请注意,删除标签是一个不可逆操作,因此请谨慎使用这些命令。在执行删除操作之前,请确保你真正想要删除该标签。

如何重命名本地仓库的tag

测试成功。

**在Git中,本地标签(tag)的命名是不可更改的。但是,你可以通过删除原有的标签,然后创建一个新的标签来达到重命名的效果。**下面是一个简单的步骤:

  1. 首先,使用以下命令删除原有的标签:

    git tag -d <原标签名称>

    <原标签名称>替换为你想要重命名的标签名称。

  2. 然后,使用以下命令创建一个新的标签,名称为新的标签名称:

    git tag <新标签名称>

    <新标签名称>替换为你想要设置的新标签名称。

  3. 如果你需要将这个新标签推送到远程仓库,使用以下命令推送:

    git push origin <新标签名称>

    <新标签名称>替换为你设置的新标签名称。

请记住,在重命名本地仓库的标签时,删除原有标签会导致与该标签相关的提交历史丢失。所以在操作之前,确保已经备份了相关的数据,以免丢失。

如何重命名远程仓库的tag

测试成功。

**在Git中,远程标签(tag)的命名是不可更改的,因为远程标签是基于共享的仓库模型,更改远程标签可能会影响其他开发者。**因此,为了重命名远程仓库的标签,通常需要遵循以下步骤:

  1. 首先,删除原有的远程标签。使用以下命令将标签从远程仓库中删除:

    git push --delete origin <原标签名称>

    <原标签名称>替换为你想要重命名的标签名称。

  2. 接下来,将本地重命名后的标签推送到远程仓库。使用以下命令推送新标签到远程仓库:

    git push origin <新标签名称>

    <新标签名称>替换为你设置的新标签名称。

请注意,这样的操作可能会影响与远程标签相关的其他开发者,因此在重命名远程标签之前,确保与团队进行充分的沟通,并确保其他开发者知道并理解此更改。

汇总脚本

次脚本自己it测试里用到过的。

bash
##hexo-theme-matery-github-public 公开仓库推送及打tag命令 2023年10月17日更新"""cd /d/hexo-theme-matery-github-publicgit pullgit add -Agit commit -m "push-hexo-theme-matery"git push git tag -a v2-hexo-theme-matery-2023.10.17 -m "v2-hexo-theme-matery-2023.10.17"git push origin v2-hexo-theme-matery-2023.10.17"""##删除和重新打taggittag-av2.0.0-hexo-theme-matery-2023.10.18-m"功能基本满足博客需求,使用体验极度丝滑"gitpushoriginv2.0.0-hexo-theme-matery-2023.10.18

image-20231017213022370

查看提交的message信息:log命令

使用 Git 命令查看提交的 commit message 信息是很常见的需求。可以通过以下几种方式来查看 commit message 信息:

1. 使用 git log

git log命令可以显示仓库的提交历史记录,包括 commit message 信息。这里有几个常用的选项:

基本用法

sh
gitlog

这个命令会显示一个包含提交哈希、作者、日期和 commit message 的列表。

image-20240831083716933

显示单行提交信息

sh
gitlog--oneline

这个命令会以单行格式显示每个提交,包含简短的 commit 哈希和 commit message。

image-20240831083751105

显示特定数量的提交

sh
gitlog-n<number>

例如,要查看最近的 5 次提交:

sh
gitlog-n5

image-20240831083812544

显示详细信息

sh
gitlog-p

这个命令会显示每个提交的详细信息,包括代码更改的差异(diff)。

image-20240831083845639

2. 使用 git show

git show命令可以显示特定提交的详细信息,包括 commit message、差异等。

查看最新提交

sh
gitshow

image-20240831083930403

查看特定提交

sh
gitshow<commit-hash>

例如:

sh
gitshowabc1234

image-20240831084026478

3. 使用 git rev-listgit log结合

如果只需要 commit message 信息,可以结合使用 git rev-listgit log命令:

sh
gitlog--format=%B-n1<commit-hash>

例如:

sh
gitlog--format=%B-n1abc1234

这个命令会只显示特定提交的 message。

image-20240831084128380

4. 使用 git log的自定义格式

git log允许使用自定义格式来显示信息,例如只显示 commit message:

sh
gitlog--pretty=format:%s

这个命令会只显示每个提交的 subject(简短的 commit message)。

只显示 commit message body:

sh
gitlog--pretty=format:%b

这个命令会只显示每个提交的 message body(详细信息)。

image-20240831084204068

5. 使用图形化工具

如果你更喜欢图形化的方式查看提交信息,可以使用一些图形化的 Git 工具,如:

  • GitKraken
  • SourceTree
  • Git Extensions
  • GitHub Desktop

这些工具提供了友好的用户界面,更方便地查看提交历史和 commit message 信息。

总结来说,使用 git log是最常见和灵活的方式查看提交的 commit message 信息,根据需要可以选择不同的选项和格式来展示提交历史。

other git命令

从 Git 的历史记录中删除文件

问题:

gitee push时报错 remote:Repository GC:https:#实际执行命令gitfilter-branch--force--index-filter'git rm --cached --ignore-unmatch site.zip'--prune-empty--tag-name-filtercat----all

请确保将 <file_path>替换为要删除的文件的路径。

==这个命令将会重写 Git 的历史记录,并将指定的文件从每个提交中删除。==在执行该命令之前,请确保备份好你的代码库。此外,删除文件后可能需要强制推送到远程仓库,因为 Git 历史记录已经被改变。

请注意,这个操作是无法撤销的,因此在执行前请谨慎考虑。

ssh测试是否可以连接到github

bash
ssh-Tgit@github.comssh-vTgit@github.com#测试过程hg@LAPTOP-G8TUFE0TMINGW64/d/hexo(main)$ssh-Tgit@github.comHiOnlyOnexl!You've successfully authenticated,but GitHub does not provide shell access.

image-20231018170528861

如何指定不需要Git管理的文件(.gitignore)

1、需求分析

有些文件,我们是不想git进行版本管控的,例如:版本控制构建后产生的文件。

那么,我们可以把这些文件提前写在.gitignore文件中,那么git就不会对这些文件进行版本管控了。

2、官方模板

我们在新建仓库时,可以看到有Add .gitignore选项,我们可以选择一个模板进行使用。

image-20211217075146832

  • 想知道这些模板的.gitignore文件里面具体有什么信息,我们可以看下这个github项目:

https:.gitignore里面如果写doc/,代表doc目录下的任何文件都将被忽略,但doc文件不会被忽略。

注意:

案例:特别注意:.gitignore里的文件对于仓库里任何匹配的对象都适用!

2023年10月25日

image-20231025122906304

案例:如果提交commit后,想再忽略一些已经提交的文件,怎么处理?

image-20231025122337027

bash
作者回复:Theproblemisthat.gitignoreignoresjustfilesthatweren't tracked before (by git add). Run git reset name_of_file to unstage the file and keep it. In case you want to also remove given file from the repository (after pushing),use git rm --cached name_of_file.把想忽略的文件添加到 .gitignore ;然后通过 git rm -- cached name_of_file 的方式删除掉git仓库里面无需跟踪的文件。

注意:git下能创建和目录同名的的文件吗-不能!

image-20211220075039207

注意:如果提交commit后,想再忽略一些已经提交的文件,怎么处理?📌

测试成功。

  • 问题背景

有如下一个背景,在当前git仓库,.gitignore里是没写output-docker-images目录的,但此时,我已经把当前下的所有文件都提交到远程仓库了。但后来发现,output-docker-images目录里的附件特别大,此时我想把这个目录给加到.gitignore里,不想被提交到远程仓库。于是就往.gitignore文件添加了output-docker-images,然后并进行了提交,但到远程仓库依然会发现output-docker-images目录还在,请问这个问题该如何解决呢?

  • gpt回答

你遇到的问题是因为.gitignore文件只对未被Git跟踪的文件生效,而你已经将output-docker-images目录及其内容提交到了远程仓库。因此,仅仅在.gitignore中添加该目录并不会影响已经被跟踪的文件。

下面是解决这个问题的步骤:

  1. output-docker-images目录从Git缓存中移除

你需要将这个目录从Git的缓存中移除,但保留本地文件。可以使用以下命令:

sh
gitrm-r--cachedoutput-docker-images

这条命令会将output-docker-images目录及其内容从Git的缓存中移除,但不会删除本地文件。

  1. 提交更改

然后你需要将更改提交到Git仓库:

sh
gitadd.gitignoregitcommit-m"Remove output-docker-images from tracking and update .gitignore"
  1. 推送更改到远程仓库

最后,推送你的更改到远程仓库:

sh
gitpushorigin<your-branch>

这样一来,output-docker-images目录及其内容将不会再被Git跟踪,并且远程仓库将不再包含这些文件。

总结

  1. 移除缓存git rm -r --cached output-docker-images
  2. 提交更改git add .gitignoregit commit -m "Remove output-docker-images from tracking and update .gitignore"
  3. 推送更改git push origin <your-branch>

通过这些步骤,你可以确保output-docker-images目录不再被包含在Git的版本控制中,并且不会再被推送到远程仓库。


自己实际测试:

1、往.gitignore文件加入output-docker-images目录

bash
#vim .gitignore……output-docker-images

2、将output-docker-images目录从Git缓存中移除

bash
[root@diy-index-home diy-index-home2.0]#git rm -r --cached output-docker-images/rm'output-docker-images/home-v2.0.tar.gz'rm'output-docker-images/home-v3.0.tar.gz'

3、提交代码

bash
[root@diy-index-home diy-index-home2.0]#git add -A[root@diy-index-home diy-index-home2.0]#git commit -m "Remove output-docker-images from tracking and update .gitignore"[master 305933d] Remove output-docker-images from tracking and update .gitignore2fileschanged,0insertions(+),0deletions(-)deletemode100644output-docker-images/home-v2.0.tar.gzdeletemode100644output-docker-images/home-v3.0.tar.gz[root@diy-index-home diy-index-home2.0]#git pushCountingobjects:3,done.Deltacompressionusingupto4threads.Compressingobjects:100%(2/2),done.Writingobjects:100%(2/2),265 bytes |0bytes/s,done.Total2(delta 1),reused 0 (delta0)remote:PoweredbyGITEE.COM[GNK-6.4]Togit@gitee.com:onlyonexl/diy-index-home2.0.gitac4240e..305933dmaster->master[root@diy-index-home diy-index-home2.0]#git status# On branch masternothingtocommit,workingdirectoryclean

4、gitee仓库观察

image-20240604195256651

可以看到大文件output-docker-images目录远程仓库里被移除了,符合预期。

git里如何丢去本次所有的所有改变呢?

如果您想在 Git 中丢弃本次所有的更改,可以根据您更改的类型采取不同的做法。以下是几种常见的情况以及相应的命令:

1. 丢弃未暂存的更改

如果您对文件进行了更改但还没有将它们添加到暂存区,可以使用以下命令:

bash
gitcheckout--.

这个命令将恢复当前工作目录中的所有文件到最后一次提交的状态。

2. 丢弃已暂存的更改

如果您已经将更改添加到暂存区,但还没有提交,可以使用以下命令:

bash
gitresetHEAD.

这个命令将把暂存区的更改移回未暂存状态。然后,您可以使用上面的 checkout命令丢弃未暂存的更改。

3. 丢弃所有更改并重置到最后一次提交😂

如果您想丢弃所有未暂存和已暂存的更改,并且希望恢复到最后一次提交的状态,可以使用以下命令:

bash
gitreset--hardHEAD

这个命令会将您的工作目录和暂存区都重置到最后一次提交的状态,所有未保存的更改将会丢失。

4. 丢弃特定文件的更改

如果您只想丢弃某个特定文件的更改,可以使用:

bash
gitcheckout--<file>

注意事项

  • 丢弃更改是不可逆的:一旦您执行了这些命令,您将无法恢复丢弃的更改,因此请确保您确实希望丢弃这些更改。
  • 使用 git status检查状态:在执行这些命令之前,使用 git status检查当前的更改状态,以便您知道将要丢弃哪些更改。

如果有其他问题或需要进一步的帮助,请随时告诉我!

能不能把包括Untracked files的文件也给一次性给删除掉?

当然可以,如果您想要删除所有未跟踪的文件(包括 Untracked files),可以使用以下命令:

1. 使用 git clean

git clean命令可以帮助您删除未跟踪的文件和目录。

  • 删除未跟踪的文件:
bash
gitclean-f
  • 删除未跟踪的目录:

如果您还想删除未跟踪的目录,可以加上 -d选项:

bash
gitclean-fd
  • 删除未跟踪的文件和目录,包括忽略的文件:

如果您还想删除被 .gitignore忽略的文件,可以使用 -x选项:

bash
gitclean-fdx

2. 注意事项

  • 请谨慎使用git clean是不可逆的,运行命令后,删除的文件将无法恢复。因此,请确保您不会删除任何重要文件。
  • 查看将要删除的文件:在执行删除命令之前,您可以先使用 -n(或 --dry-run)选项查看将要删除的文件:
bash
gitclean-fdn

这样可以确保您了解将被删除的内容。

示例

bash
# 查看将要删除的文件gitclean-fdn# 删除未跟踪的文件和目录gitclean-fd

如果您有其他问题或需要更多帮助,请随时告诉我!

案例:对比未提交的文件与之前的版本之间的变化

背景

image-20240914105841555

image-20240914105856066

gpt

git里如何对比未提交的文件和之前的文件发生了什么样的改变?

在 Git 中,您可以使用几种方法对比未提交的文件与之前的版本之间的变化。以下是一些常用的命令和方法:

1. 使用 git diff

要查看未提交的更改,与最近的提交进行对比,可以使用以下命令:

bash
gitdiff

这个命令会显示所有暂存区和工作目录中未提交的更改。


image-20240914155017070

2. 对比特定文件的更改

如果您只想查看特定文件的更改,可以在命令后加上文件名:

bash
gitdiff<filename>

image-20240914155047302

3. 对比已暂存的更改

如果您已经将更改添加到暂存区(使用 git add),并想查看这些暂存的更改与最后一次提交之间的差异,可以使用:

bash
gitdiff--cached

本次不涉及:

image-20240914155121039

4. 使用图形化工具

如果您更喜欢图形化界面,许多 Git 客户端(如 GitKraken、SourceTree、或 VSCode 等)提供可视化的差异查看功能。您可以在这些工具中选择文件并查看其更改。


image-20240914155213424

}往下移动了一行:就ok了。

image-20240914155320158

5. 查看历史提交的差异

如果您需要查看某个特定提交与当前工作目录的差异,可以使用:

bash
gitdiff<commit_hash>

<commit_hash>替换为您想要比较的提交的哈希值。

6. 查看所有未提交的更改

要获取更详细的信息,包括文件状态和文件的具体更改,可以使用:

bash
gitstatus

然后使用 git diff来查看具体的更改。

示例

假设您对 example.txt文件进行了修改,您可以这样查看其未提交的更改:

bash
gitdiffexample.txt

这样就可以查看 example.txt中的具体修改内容。

通过这些命令,您可以轻松地对比未提交的文件和之前的版本之间的变化。

案例:将已提交的文件从远程仓库移除掉

2024年10月13日测试成功

gpt提问:

我的本地git仓库目录如下: docusaurus blog目录 .gitignore文件 其他文件

当前blog目录已经提交到github远程仓库了,但此时我有个需求,我想把blog目录写到.gitignore里,同时要让远程仓库是没有blog目录的,我该怎么操作git呢?

gpt回答:

要将 blog目录添加到 .gitignore文件中,同时确保远程仓库中不再包含该目录,你可以按照以下步骤操作:

步骤 1:将 blog目录添加到 .gitignore

首先,打开你的 .gitignore文件,添加 blog/这一行。确保文件内容如下(如果该文件存在):

blog/

步骤 2:从 Git 仓库中移除 blog目录

接下来,你需要从 Git 的版本控制中移除 blog目录,但并不删除本地实际文件。使用以下命令:

bash
gitrm-r--cachedblog
  • --cached选项确保只从 Git 的索引(版本控制)中删除文件,而不会删除本地文件。

步骤 3:提交更改

提交你的更改,包括 .gitignore文件的更新和 blog目录的移除:

bash
gitadd.gitignoregitcommit-m"Add blog directory to .gitignore and remove from version control"

步骤 4:推送更改到远程仓库

最后,将更新推送到远程仓库:

bash
gitpushoriginmain

请根据你的分支名称替换 main,如果你使用的是其他分支,请相应地调整。

验证

  1. 在远程仓库中查看,确保 blog目录已被移除。
  2. 在本地,确认 .gitignore文件中已包含 blog/

通过以上步骤,你能够将 blog目录添加到 .gitignore,并确保远程仓库中不再包含该目录。