跳到主要内容

2、git命令

git命令

image-20231018170236177

目录

[toc]

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

查看分支

git branch -v #查看本地分支有哪些
git branch -av #查看本地分支和远程分支有哪些

# *代表当前所处的分支

##图形化查看分支情况
gitk
gitk --all

示例:

hg@LAPTOP-G8TUFE0T MINGW64 ~/Desktop/it/01-SuGit/git_learning (suling)
$ git branch -av
master 7b84beb Add the first command with config
* suling 30c1501 Add test
temp 30c1501 Add test
remotes/zhineng/suling 30c1501 Add test

创建分支

git checkout -b 分支名 #基于当前分支创建新分支
git checkout -b 分支名 commitid #基于某个commit创建一个分支 (后面字符串是其他commit log中的id)
git checkout -b 新分支名 旧分支名 #基于某个分支创建新分支
  • 注意:我们在本地无法直接在clone下来的远程分支上做变更的,只能基于远程分支建本地分支后,才能创建commit

image-20231122211551922

切换分支

$ git checkout 分支名 

⚠️注意:在切换分支前必须要保证当前分支下git仓库状态是cleaning的,否则会切换分支失败,报错的;

image-20211201070249551

删除分支

#删除分支命令:
#(1)删除:
`git branch -d branch_name`
#(2)强制删除:
`git branch -D branch_name`
#(3)删除远程主机的分支
#表示删除 origin 主机的 master 分支:#亲测有效
git push origin --delete master


说明:选项
-d
--delete
Delete a branch. The branch must be fully merged in its upstream branch, or in HEAD if no upstream was set with --track or --set-upstream-to.
删除一个分支。 分支必须在它的上游分支中完全合并,或者在HEAD中,如果没有使用-track或-set-upstream-to设置上游。

-D
Shortcut for --delete --force.
--delete --force的快捷方式。


注意:git branch -d branch_name:使用-d 在删除前Git会判断在该分支上开发的功能是否被merge到其它分支。如果没有,不能删除。如果merge到其它分支,但之后又在其上做了开发,使用-d还是不能删除。-D会强制删除;

注意:用-d 报“error:The branch is not fully merged”,是指这个分支不曾合入到其他任何分支。在日常开发中,我们通常赋予有意义的分支名,Git判断本分支没和任何别的分支合并,意味这删除存在风险。它也提供我们-D的方式,如果确定无风险就用-D 。

注意:删除分支,-d会加一层判断逻辑,看是否合并到拉出的分支,确保删除动作的安全,-D不做这个判断直接删除。

注意:作者回复: 应该是merge到缺省分支,执行 branch -d就不报错了。如果merge到非缺省分支,还是要报错的。

恢复被删除的分支

image-20231122211912865

作者回复:
好问题,可参考:
https://stackoverflow.com/questions/3640764/can-i-recover-a-branch-after-its-deletion-in-git

可以再了解一下 git reflog 这个命令的作用。

重命名分支

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 操作,如果这个时候你想继续推送的话使用如下命令

# 将本地分支 main 强制推送到远程主机 origin 的 main 分支上:
git push --force origin main

标签: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测试里用到过的。

##hexo-theme-matery-github-public 公开仓库推送及打tag命令 2023年10月17日更新
"""
cd /d/hexo-theme-matery-github-public
git pull
git add -A
git 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
"""

##删除和重新打tag
git tag -a v2.0.0-hexo-theme-matery-2023.10.18 -m "功能基本满足博客需求,使用体验极度丝滑"
git push origin v2.0.0-hexo-theme-matery-2023.10.18

image-20231017213022370

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

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

1. 使用 git log

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

基本用法

git log

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

image-20240831083716933

显示单行提交信息

git log --oneline

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

image-20240831083751105

显示特定数量的提交

git log -n <number>

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

git log -n 5

image-20240831083812544

显示详细信息

git log -p

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

image-20240831083845639

2. 使用 git show

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

查看最新提交

git show

image-20240831083930403

查看特定提交

git show <commit-hash>

例如:

git show abc1234

image-20240831084026478

3. 使用 git rev-listgit log 结合

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

git log --format=%B -n 1 <commit-hash>

例如:

git log --format=%B -n 1 abc1234

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

image-20240831084128380

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

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

git log --pretty=format:%s

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

只显示 commit message body:

git log --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://gitee.com/onlyonexl/hg-mkdocs-gitee-metadata/settings#git-gcerror: File: a1a9a8d193dd4374e1c575c2c1e10bb1fdcf949a 847.55 MB, exceeds 100.00 MB. remote: Use command below to see the filename: remote: git rev-list --objects --all | grep a1a9a8d193dd4374e1c575c2c1e10bb1fdcf949a remote: Please remove the file from history and try again. (https://gitee.com/help/articles/4232) To gitee.com:onlyonexl/hg-mkdocs-gitee-metadata.git ! [remote rejected] main -> main (pre-receive hook declined) error: failed to push some refs to 'gitee.com:onlyonexl/hg-mkdocs-gitee-metadata.git'

回答:

这个错误是由于要推送的文件大小超过了Gitee的限制。你可以按照错误信息中提供的链接,使用git rev-list --objects --all | grep a1a9a8d193dd4374e1c575c2c1e10bb1fdcf949a命令来查看文件名。然后从历史记录中删除该文件,并重新尝试推送。更多详细步骤可以参考提供的链接。

问题:如何从历史记录中删除该文件呢?

回答:要从 Git 的历史记录中删除文件,你可以使用以下命令:

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch <file_path>' --prune-empty --tag-name-filter cat -- --all

#实际执行命令
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch site.zip' --prune-empty --tag-name-filter cat -- --all

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

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

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

ssh测试是否可以连接到github

ssh -T git@github.com
ssh -vT git@github.com

#测试过程
hg@LAPTOP-G8TUFE0T MINGW64 /d/hexo (main)
$ ssh -T git@github.com
Hi OnlyOnexl! 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://github.com/github/gitignore

image-20211217074647565

image-20211217074717831

  • 注意:带/和不带/是完全不一样的

例如:

.gitignore里面如果写 doc,代表doc文件或者doc目录下的任何文件都将被忽略。

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

image-20211217074806928

⚠️注意

  • .gitignore这个名字不能变,必须就叫这个,否则不起效果。

  • git仓库下的文件必须要在工作区才行,添加到缓存区就不起作用了。

因此,以后,我们再写工程的时候,可以参考这里面的文件进行编写。

3、实验测试

测试过程如下

  • 查看当前环境:

image-20211220073906061

  • 添加.gitignore文件和测试文件:

image-20211220075314240

我们可以看到,虽然创建了doc目录及doc/test.txt文件,images/doc文件,但是因.gitignore文件里面写了doc内容,所以git把这些内容都忽略了,因此工作区里面只能看到一个.gitignore文件需要被添加到暂存区。

我们再来更改.gitignore里面的内容为doc/,再来看下效果:

image-20211220075359868

发现doc这个目录及下面所属文件都被git忽略了,但images/doc文件被git保留了,符合实验预期效果。

我们再把.gitignore改下名称,看是否有效果?(答案可想而知,是不会生效的)

image-20211220075559004实验结束。

FAQ

案例:.gitignore文件使用

在git仓库,新建.gitignore文件,然后里面添加你想要忽略的文件:

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

注意:

  • .gitignore这个名字不能变,必须就叫这个,否则不起效果。
  • git仓库下的文件必须要在工作区才行,添加到缓存区就不起作用了。

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

2023年10月25日

image-20231025122906304

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

image-20231025122337027

作者回复: The problem is that .gitignore ignores just files that weren'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的缓存中移除,但保留本地文件。可以使用以下命令:

git rm -r --cached output-docker-images

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

  1. 提交更改

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

git add .gitignore
git commit -m "Remove output-docker-images from tracking and update .gitignore"
  1. 推送更改到远程仓库

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

git push origin <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目录

#vim .gitignore
……
output-docker-images

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

[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、提交代码

[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 .gitignore
2 files changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 output-docker-images/home-v2.0.tar.gz
delete mode 100644 output-docker-images/home-v3.0.tar.gz

[root@diy-index-home diy-index-home2.0]#git push
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 265 bytes | 0 bytes/s, done.
Total 2 (delta 1), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.4]
To git@gitee.com:onlyonexl/diy-index-home2.0.git
ac4240e..305933d master -> master
[root@diy-index-home diy-index-home2.0]#git status
# On branch master
nothing to commit, working directory clean

4、gitee仓库观察

image-20240604195256651

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

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

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

1. 丢弃未暂存的更改

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

git checkout -- .

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

2. 丢弃已暂存的更改

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

git reset HEAD .

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

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

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

git reset --hard HEAD

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

4. 丢弃特定文件的更改

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

git checkout -- <file>

注意事项

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

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

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

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

1. 使用 git clean

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

  • 删除未跟踪的文件:
git clean -f
  • 删除未跟踪的目录:

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

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

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

git clean -fdx

2. 注意事项

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

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

示例

# 查看将要删除的文件
git clean -fdn

# 删除未跟踪的文件和目录
git clean -fd

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

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

背景

image-20240914105841555

image-20240914105856066

gpt

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

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

1. 使用 git diff

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

git diff

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


image-20240914155017070

2. 对比特定文件的更改

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

git diff <filename>

image-20240914155047302

3. 对比已暂存的更改

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

git diff --cached

本次不涉及:

image-20240914155121039

4. 使用图形化工具

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


image-20240914155213424

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

image-20240914155320158

5. 查看历史提交的差异

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

git diff <commit_hash>

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

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

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

git status

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

示例

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

git diff example.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 目录,但并不删除本地实际文件。使用以下命令:

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

步骤 3:提交更改

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

git add .gitignore
git commit -m "Add blog directory to .gitignore and remove from version control"

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

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

git push origin main

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

验证

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

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

关于我

我的博客主旨:

  • 排版美观,语言精炼;
  • 文档即手册,步骤明细,拒绝埋坑,提供源码;
  • 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!

🍀 微信二维码 x2675263825 (舍得), qq:2675263825。

image-20230107215114763

🍀 微信公众号 《云原生架构师实战》

image-20230107215126971

🍀 个人博客站点

http://onedayxyy.cn/

image-20231016061438175

🍀 语雀

https://www.yuque.com/xyy-onlyone

image-20230912072007284

🍀 csdn

https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421

image-20230107215149885

🍀 知乎

https://www.zhihu.com/people/foryouone

image-20230107215203185

最后

好了,关于本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!

image-20230829202658887


0%