经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 软件/图像 » Git » 查看文章
通过实战操作学git
来源:cnblogs  作者:战争热诚  时间:2023/8/21 8:56:44  对本文有异议

  虽然说 ”好记性不如烂笔头”,但是学习不看等于没学,学习不用等于不会,所以说”实战才是检验真理的唯一标准“,通过实战则会学到很多东西。

  因为陈** 太懒,并且不喜欢查百度,老是犯同样的问题,于是我通过完整的操作git流程和一些实战中的场景,将常用git流程和命令整理了下来,这样也方便我女盆友带入学习,哈哈哈。

  首先,新人进入公司,拉取代码必然先要注册账号,设置自己的环境。俗话说得好:工欲善其事必先利其器,所以配置一个好的环境可以方便自己很多。下面就先配置环境:

step1:配置电脑和git环境

  下载git就不多说了,陈某某可以看我之前的笔记。然后就是配置git环境了。

1,配置git环境

  首先,您需要配置您的 Git 环境,包括设置您的用户名和邮箱,以便您的提交能够正确归属。

  1. git config --global user.name "Your Name"
  2. git config --global user.email "your.email@example.com"

  因为Git 的签名设置涉及到用户的姓名和电子邮件地址,以及 GPG 密钥的使用。并且签名用于标识提交的作者和验证提交的真实性。所以设置签名有助于确保提交的真实性和作者的身份,特别是在开源项目中。根据特定的的需求,也可以选择是否使用 GPG 密钥进行更强的签名验证。

  并且后续提交代码,也可以通过commit添加签名的提交,比如下面操作:

  1. git commit -s -m "Signed commit" # 进行签名的提交
  2.  
  3. 这样查看log,即使用 git log 显示结果如下:
  4.  
  5. commit 6e65a67132ae94b9bdc887d72ff87e2f14ac3c9f (HEAD -> main)
  6. Author: Your Name <your.email@example.com>
  7. Date: Mon Aug 17 12:34:56 2023 +0000
  8.  
  9. Your commit message
  10. Signed-off-by: Your Name <your.email@example.com>
  11. GPG Key ID: XXXXXXXX
  12.  
  13. commit a8c7e9d63a44c692e53c6181f2b1b55e523c19fe
  14. Author: Another Contributor <another@example.com>
  15. Date: Sun Aug 16 15:20:12 2023 +0000
  16.  
  17. Another commit message
  18. Signed-off-by: Another Contributor <another@example.com>
  19. GPG Key ID: YYYYYYYY

  在这个示例中,每个提交都带有 "Signed-off-by" 行,显示了签名的作者信息和 GPG 密钥的 ID。请将 "Your Name"、"your.email@example.com"、"Your commit message"、"XXXXXXXX" 等想象为实际的信息。

2,clone代码仓库

  自己的环境设置好之后,就可以通过 Git 命令行或图形界面工具来克隆公司的代码仓库。假设远程代码仓库的 URL 为 https://github.com/yourcompany/repository.git,就可以执行以下命令来克隆代码仓库:

  1. git clone https://github.com/yourcompany/repository.git

   陈童靴,注意复制的时候需要更改一下名称,当然公司的代码库旁边就有git clone(ssh...)等。

3,切换到dev_new 分支

  默认情况下,您克隆仓库后会在主分支(通常是 master 或 main)上。但根据您的需求,您需要切换到公司给您创建的 dev_new 分支上,通过下面命令进行操作:

  1. git checkout -b dev_new

  怎么说呢,就是master分支(近年来,github社区修改为main分支了,因为master有歧义,涉及到一些人权等问题)一般是主分支,项目的发布版本。所以我们克隆到本地后,如果要开发的话,也要切换到自己的开发分支,因为远程自己也有自己的开发分支。所以我个人认为就是和远程保持一致而已。也不要东3自己本地的master分支就好。

4,拉取远程分支更新

  一旦切换到 dev_new 分支,也就是自己的开发分支,当然就可以通过以下命令拉取远程分支的最新更改:

  1. git pull origin dev_new

  如果在拉取过程中有冲突,需要解决这些冲突。Git 会提示您手动合并冲突的部分。但是首次拉取,一般没有。因为自己远程的dev_new分支也是克隆master分支的,至于所说的冲突就是后面提交代码多了的问题。这个后面遇到再说,我也会给出实战例子的,不要担心。

5,获取其他分支的更新

  如果您还想获取其他分支(如 master 或 dev)的更新,您可以切换到相应分支并拉取最新更改,操作如下:

  1. git checkout master
  2. git pull origin master
  3.  
  4. git checkout dev
  5. git pull origin dev

  这种情况一般就是协助同事进行测试操作,所以需要远程拉取别人的分支代码,但是不影响自己的开发分支。这个我后面也会举个例子的。

6,定期更新

  在您工作的过程中,定期地更新您的本地分支以获取最新的更改。您可以使用 git pull 命令来获取远程分支的更新。就是自己开发的部分会给远程代码提交,当然别人也会提交,为了保持代码的最新,则需要定期update。

  以上就是一个整体的流程,其实这样说,懂得都懂,不懂得也是一脸懵逼。所以我为小陈设定了下面一些常见新手会遇到的场景,并且手把手的教练。

 

step2:初步提交代码

   小陈喜欢使用Pycharm写代码,觉得非常好用,于是自己写完代码后,进行提交代码,结果架构师反馈,提交的PR有问题,需要修改,但是她不知道为什么会有.idea文件,自己都没有注意,结果把本地的.idea文件夹提交到远程了。

  顺便提一句.idea文件:首先,无论是谁开发,使用IDE都无可厚非,毕竟这是一种提升开发效率的软件,而.idea文件就是以”configuration File" 形式存储于Pycharm等IDE工具中的配置文件,也就是说,在创建项目时,IDE会自动生成一个.idea文件夹,目的是存储项目设置相关的文件。.idea文件夹包含了工程相关的元数据,如项目名称,编译器配置,版本控制,项目模板,语言设置,运行配置等等。

   废话说完了,那么如何从自己已经提交到自己远程仓库中删除“.idea” 文件及其内容呢。

1,从本地仓库删除 “.idea”文件夹。

  首先在自己的本地项目目录中,运行以下命令来删除:

  1. git rm -r .idea

  然后可以使用git status查看更改状态,当然也可以直接提交更改:

  1. git commit -m "Remove .idea directory"

  这里顺带说一下git commit命令。

  git commit 是 Git 版本控制系统中的一个重要命令,用于将暂存区中的更改提交到版本历史中。每次提交都会生成一个新的提交记录,其中包含了更改的快照以及相关的元数据。以下是关于 git commit 命令以及常见参数的详细介绍:

  1. git commit -m "Commit message"

  常见参数

  • -m "Commit message":使用 -m 参数后面跟随的字符串作为提交消息。提交消息应该简洁明了地描述本次提交的目的和内容。注意这里少说废话,也不要长篇大论,就简单明了的将自己的问题提交了,比如自己写了什么功能等。
  • -a:自动将已追踪的修改添加到暂存区并提交。这相当于运行 git addgit commit 命令的组合。注意,该选项只适用于已经追踪的文件,对于新添加的文件仍然需要使用 git add

  • -s:用于签署提交,表示提交的更改已经经过签名验证。通常用于在开源项目中证明提交者的身份。这个之前有介绍,如果使用-s,则提交都带有 "Signed-off-by" 行,并且显示自己的name, email。

  • -v:在提交消息中显示当前更改的详细信息,包括差异和更改的行数统计。

  示例

  1. git add file.txt # 将更改添加到暂存区
  2. git commit -m "Fix a bug" # 提交暂存区中的更改并添加提交消息
  3.  
  4. git commit -a -m "Add new feature" # 添加并提交所有已追踪的更改,包括新添加的文件
  5.  
  6. git commit -s -m "Signed commit" # 进行签名的提交
  7.  
  8.  
  9. git commit # 使用文本编辑器输入详细的提交消息

  

2,推送到远程分支

  注意这里,因为是自己删除自己的代码(这里指的是.idea文件夹),所以其实并不需要增加git commit 新写”delete .idea"去覆盖自己之前的commit,可以复用之前的,让别人无需知道自己做了一件蠢事,所以这里则可以使用下面命令:

  1. git commit --amend

  进去之后是自己之前的commit,一般情况下不需要修改,如果要修改则进去修改也可以。但是注意,就是该操作会改变你原来的commit id哦。

  最后就是push了。

  1. git push origin <branch-name>

  其中,<branch-name>是自己要推送更改的分支名称。

 3,一劳永逸解决问题——创建并编译  .gitignore文件

  如何一次性解决问题呢,那么就是在本地设置.gitignore文件内容,这样就不会每次提交.idea文件,并且再进行删除操作了。

  本地设置的地址是:将自己的.gitignore剪贴到C盘根目录(Windows:C:/User/你的用户名/)

  一般项目的根目录下,都会存在一个名为 .gitignore 的文件。但是自己也可以为自己设置一个全局的个人的.gitignore,因为项目的.gitignore可能没有考虑那么到位,如果你不想修改项目的.gitignore,并且自己也不想手动删除,就给自己配置一个吧。

  当然我们可以给自己配置专属的其他希望忽略的内容。为此呢,我这里简单的说一下常见的规则,并且给小陈两个模板,一次是如果写C++常用的模板,一个是Python为主的代码。

  在.gitignore文件中,您可以列出希望Git忽略的文件、文件夹或模式。以下是一些常见的.gitignore规则示例:

  1. 忽略特定文件或文件夹:

  1. filename.ext # 忽略特定文件
  2. folder/ # 忽略特定文件夹

  2,使用通配符

  1. *.ext # 忽略所有扩展名为 .ext 的文件
  2. folder/*.ext # 忽略特定文件夹中的所有扩展名为 .ext 的文件

  3,忽略文件夹及其内容

  1. folder/ # 忽略整个文件夹及其内容

  4,排除特定文件或文件夹

  1. !filename.ext # 不忽略特定文件(排除忽略规则)
  2. !folder/ # 不忽略特定文件夹(排除忽略规则)

  5,忽略编译生成的文件或文件夹

  1. build/ # 忽略编译生成的文件夹
  2. *.o # 忽略所有 .o 文件(编译生成的目标文件)

  6,忽略操作系统或编译器生成的文件:

  1. .DS_Store # 忽略 macOS 生成的 .DS_Store 文件
  2. Thumbs.db # 忽略 Windows 生成的 Thumbs.db 文件
  3. *.swp # 忽略 Vim 生成的 .swp 临时文件

  这只是一些常见的示例,.gitignore文件的内容会因项目类型、开发环境和个人偏好而有所不同。您可以根据您的项目需要自定义.gitignore文件,以忽略不必要的文件和文件夹,并确保仓库中只包含必要的源代码和资源文件。另外,GitHub官方提供了一个.gitignore模板集合,您可以在GitHub/gitignore上找到针对不同编程语言、开发环境和工具的模板参考。

   这里给出两个模板,C++和Pyhton的

  C++ 深度学习项目的 .gitignore 文件示例:

  1. # Compiled Object files
  2. *.slo
  3. *.lo
  4. *.o
  5. *.obj
  6.  
  7. # Precompiled Headers
  8. *.gch
  9. *.pch
  10.  
  11. # Compiled Dynamic libraries
  12. *.so
  13. *.dylib
  14. *.dll
  15.  
  16. # Compiled Static libraries
  17. *.lai
  18. *.la
  19. *.a
  20. *.lib
  21.  
  22. # Executables
  23. *.exe
  24. *.out
  25. *.app
  26.  
  27. # Build directories
  28. _build/
  29. build/
  30. dist/
  31. bin/
  32. tmp/
  33. CMakeFiles/
  34. CMakeCache.txt
  35. CMakeScripts/
  36. CMakeTmp/
  37. CTestTestfile.cmake
  38.  
  39. # Visual Studio files
  40. .vscode/
  41. *.sln
  42. *.vcxproj
  43. *.vcxproj.filters
  44. *.pdb
  45. *.idb
  46. *.ipdb
  47. *.obj
  48. *.db
  49. *.tlog
  50. *.manifest
  51. *.log
  52. *.cache
  53. *.ilk
  54. *.dll
  55. *.exe
  56. *.log
  57. *.suo
  58. *.user
  59. *.vcproj.*
  60. *.opensdf
  61.  
  62. # Xcode files
  63. .DS_Store
  64. *.xcodeproj/
  65. *.xcworkspace/
  66.  
  67. # IDE project files
  68. .idea/
  69. *.pro.user
  70. *.kdev4
  71.  
  72. # Miscellaneous
  73. *.swp
  74. *.swo
  75. *.tmp
  76. *.tmp.*
  77. *~
  78. *#
  79. .#*

  Python 深度学习项目的 .gitignore 文件示例:

  1. # Byte-compiled / optimized / DLL files
  2. __pycache__/
  3. *.py[cod]
  4. *$py.class
  5.  
  6. # C extensions
  7. *.so
  8.  
  9. # Distribution / packaging
  10. dist/
  11. build/
  12. eggs/
  13. *.egg-info/
  14. *.egg
  15.  
  16. # Python local environment
  17. .env/
  18.  
  19. # Jupyter Notebook auto-generated files
  20. .ipynb_checkpoints/
  21.  
  22. # PyCharm
  23. .idea/
  24. *.iml
  25. *.iws
  26. *.ipr
  27.  
  28. # Visual Studio Code
  29. .vscode/
  30.  
  31. # Miscellaneous
  32. *.swp
  33. *~
  34. __MACOSX/
  35. .DS_Store
  36. Thumbs.db

  上述示例中的 .gitignore 文件会排除编译、构建、临时文件以及 IDE 生成的文件等,以确保您的版本控制仓库保持干净。根据项目的具体情况,您可能需要根据需要进行适当的调整。这些示例只是一些常见的排除规则,您可以根据项目的实际情况进行修改。

4,顺带配置.gitconfig文件

  之前忘了说.gitconfig文件了,既然都配置了.gitignore文件,那么顺手也配置一下.gitconfig吧。.gitconfig 是 Git 的配置文件,用于设置 Git 的全局配置选项。你可以通过编辑这个文件来配置你的 Git 环境。以下是如何配置 .gitconfig 文件的步骤:

  1. 定位 .gitconfig 文件:

    • 在 Windows 系统上,.gitconfig 文件通常位于你的用户主文件夹下(例如:C:\Users\YourUsername)。
    • 在类 Unix 系统上(如 Linux 和 macOS),.gitconfig 文件位于你的用户主目录下(例如:/Users/YourUsername)。
  2. 编辑 .gitconfig 文件:

    你可以使用任何文本编辑器来编辑 .gitconfig 文件。你可以在终端使用命令行编辑器如 nano 或 vim,也可以使用图形界面的编辑器如 Notepad(Windows)、TextEdit(macOS)、VS Code 等。

    打开终端(或命令提示符)并输入以下命令来编辑 .gitconfig 文件:

  1. git config --global --edit

  这将打开默认文本编辑器,并在其中显示 .gitconfig 文件的内容。

  关于配置选项:

  1. 在打开的 .gitconfig 文件中,你可以设置各种不同的选项,如用户名、电子邮件、默认编辑器、别名等。以下是一些示例配置选项:

  1. [user]
  2. name = Your Name
  3. email = your.email@example.com
  4.  
  5. [core]
  6. editor = code --wait # 设置默认编辑器为 Visual Studio Code
  7.  
  8. [alias]
  9. co = checkout
  10. ci = commit
  11. br = branch

  在 [user] 部分设置你的用户名和邮箱,在 [core] 部分设置默认编辑器,在 [alias] 部分设置一些常用的别名命令。

  1. 保存文件:

    在编辑完成后,保存文件并关闭文本编辑器。

  2. 验证配置:

    可以使用以下命令来查看当前的全局配置:

  1. git config --global --list

  请注意,--global 标志表示这些配置将适用于你的整个 Git 环境。如果你想在特定项目中覆盖某些配置,你可以在项目目录下创建一个名为 .git/config 的文件,其中的配置选项会覆盖全局配置。

  下面是一个有经验的 Git 用户使用的 .gitconfig 文件示例。这个示例包含了一些常见的配置,以及一些高级别的配置选项,如颜色设置、别名、分支保护等.

  1. [user]
  2. name = John Doe
  3. email = john.doe@example.com
  4.  
  5. [core]
  6. editor = code --wait # 默认编辑器设置为 Visual Studio Code
  7. autocrlf = input # 在提交时转换换行符为 LF
  8.  
  9. [color]
  10. ui = auto # 自动启用颜色
  11.  
  12. [alias]
  13. co = checkout
  14. ci = commit
  15. br = branch
  16. st = status
  17. hist = log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short
  18.  
  19. [diff]
  20. tool = vscode # 使用 Visual Studio Code 作为 diff 工具
  21. [difftool "vscode"]
  22. cmd = code --wait --diff $LOCAL $REMOTE
  23.  
  24. [merge]
  25. tool = vscode # 使用 Visual Studio Code 作为合并工具
  26. [mergetool "vscode"]
  27. cmd = code --wait $MERGED
  28. trustExitCode = true
  29.  
  30. [push]
  31. default = simple # 默认推送模式设置为 simple
  32.  
  33. [rebase]
  34. autosquash = true # 自动折叠 commit
  35.  
  36. [fetch]
  37. prune = true # 获取时自动删除远程分支上不存在的分支
  38.  
  39. [pull]
  40. rebase = true # 默认拉取模式设置为 rebase
  41.  
  42. [commit]
  43. gpgsign = true # 启用 GPG 签名
  44.  
  45. [credential]
  46. helper = wincred # 使用 Windows 凭据管理器存储凭据
  47.  
  48. [branch "main"]
  49. protection = required-status-checks,strict # 保护分支配置
  50.  
  51. [core]
  52. pager = less -F -X # 设置分页工具为 less 并禁用清屏

  

  我自己的如下:

  1. [user]
  2. name = XaaXbb
  3. email = XaaXbb@company.com
  4. [core]
  5. editor = vim
  6. autocrlf = input
  7. fileMode = false
  8. [color]
  9. ui = auto
  10. [push]
  11. default = simple
  12. [alias]
  13. co = checkout
  14. cb = checkout -b
  15. cp = cherry-pick
  16. cx = cherry-pick -x
  17. st = status
  18. ss = status -s
  19. br = branch
  20. ba = branch -a
  21. cs = commit -s
  22. ca = commit --amend -s
  23. df = diff
  24. dfca = diff --cached
  25. throw = reset --hard HEAD
  26. throwh = reset --hard HEAD^
  27. lg = log --oneline --decorate --color
  28. logs = log --stat --color
  29. dt = difftool
  30. mt = mergetool
  31. [merge]
  32. tool = vimdiff
  33. [diff]
  34. tool = vimdiff
  35. [difftool]
  36. prompt = false
  37. [log]
  38. date = default
  39. [filter "lfs"]
  40. clean = git-lfs clean -- %f
  41. smudge = git-lfs smudge -- %f
  42. required = true
  43. process = git-lfs filter-process
  44. [pull]
  45. rebase = true
  46. [safe]
  47. directory = %(prefix)///AA/BB/CC/..

  

step3:再次提交代码(git 如何删除Untracked files)

  小陈发现自己刚刚设定好一切后,同时新增加了一些其他无用的东西,但是这次学聪明了,并没有add进去,于是她要删除 Git 中的未跟踪文件,最简单的方法就是git status去查看,然后手动去项目删除,当然作为一个程序员,必须要代码删除,这可是尊严,不是码?

  所以可以使用 git clean 命令进行删除。git clean 命令用于清除未添加到版本控制的文件。请注意,git clean 命令是不可逆的,并且将永久性地删除未跟踪文件,请确保在执行该命令之前确认你确实要删除这些文件。

  下面简单介绍一下,以下是一些常用的 git clean 命令选项:

  • -n--dry-run:显示将要删除的未跟踪文件列表,但不执行删除操作。
  • -f--force:强制执行删除操作,即使存在只读文件或受保护的文件夹。
  • -d:同时删除未跟踪的文件夹。
  • -x:同时删除 Git 忽略的文件。

  例如,要查看将要删除的未跟踪文件列表,可以执行以下命令:

  1. git clean -n

  如果你确定要删除这些未跟踪文件,请使用以下命令进行删除:

  1. git clean -f

  如果你还希望删除未跟踪的文件夹,可以添加 -d 选项

  1. git clean -fd

  请再次注意,执行 git clean 命令时要小心,以免误删除重要文件。在执行任何 Git 命令之前,请确保已备份你的代码。

step4: 远程拉取别人分支进行测试

  小陈做了两天,老板发现其能力确实稍微有些欠缺,就让她先帮忙测试,顺带熟悉项目代码。同时呢,项目组小张写完了一个功能找老板merge,但是老板希望小陈来帮忙测试一下,于是小陈就有新的需求:需要远程拉取小张的dev分支,然后帮助小张测试代码,因为这时候小张的代码并没有merge到master分支,所以小陈需要去拉去小张的开发分支,然后再测试,那么小陈应该如何做呢?

  下面简单介绍一下流程,其实和拉取master分支一样。

1,首先查看远程仓库的所有分支

  1. git branch -r

  通过上述命令,可以查看远程仓库的所有分支。

  为了让小陈对branch命令有个深刻的印象,下面再复习一下git branch的命令操作:git branch 是一个用于管理和查看分支的 Git 命令。它用于列出、创建、删除和切换分支,以及显示有关分支的信息。

  下面是常见的git branch命令及其介绍:

  1. git branch 显示当前仓库中所有分支的列表,当前分支会用星号标记。
  2.  
  3. git branch <branch-name>: 创建一个新分支,命名为 <branch-name>。
  4.  
  5. git branch -d <branch-name>: 删除已合并到其他分支的 <branch-name> 分支。如果分支未合并,此命令会报错。
  6.  
  7. git branch -D <branch-name>: 强制删除分支 <branch-name>,无论其是否合并。
  8.  
  9. git branch -m <new-branch-name>: 重命名当前分支为 <new-branch-name>。
  10.  
  11. git branch -a 列出本地和远程所有分支的列表。
  12.  
  13. git branch -v 列出每个分支的最新提交信息。
  14.  
  15. git branch --merged 列出已合并到当前分支的其他分支。
  16.  
  17. git branch --no-merged 列出尚未合并到当前分支的其他分支。
  18.  
  19. git branch --contains <commit> 列出包含指定 <commit> 的所有分支。
  20.  
  21. git branch --set-upstream-to=<upstream-branch>: 为当前分支设置上游分支,以便与远程跟踪分支关联。
  22.  
  23. git branch --unset-upstream 解除当前分支与上游分支的关联。

  下面是常见的git branch命令的示例用法(陈童靴只需要掌握这几个目前就够用了):

  1. 创建一个新分支:git branch feature-branch
  2.  
  3. 切换到另一个分支:git checkout another-branch
  4.  
  5. 列出所有分支:git branch -a
  6.  
  7. 删除已合并的分支:git branch -d merged-branch
  8.  
  9. 列出包含特定提交的分支:git branch --contains <commit-hash>

 

2,基于远程分支创建本地分支

  根据上面列出的远程分支,进行复制要拉取的远程分支的名称(也就是找到小张的开发分支),然后创建本地分支

  1. git checkout local_branch_name origin/remote_branch_name

  上面代码是根据远程分支创建一个本地跟踪分支。

3,切换到本地测试分支

  然后从自己本地的开发分支切换到本地测试分支

  1. git checkout local_branch_name

  这样就可以切换到本地分支了。

  但是实际上,上面步骤2和步骤3的命令,通过下面代码一步实现

  1. git checkout -b local_branch_name origin/remote_branch_name

  说到 checkout命令,当然这也是git中比较重要的命令之一。下面再复习一下 git checkout命令。git checkout 是 Git 中一个重要的命令,主要用于切换分支、恢复文件以及创建新分支等操作。根据不同的用法,它有不同的功能。      

  以下是一些常见的 git checkout 命令及其介绍:

  1. 切换分支:
  2. git checkout <branch-name>:将工作目录切换到指定的 <branch-name> 分支。
  3.  
  4. git checkout -b <new-branch-name>:创建并切换到名为 <new-branch-name> 的新分支。
  5.  
  6. git checkout -:切换回上一个分支,特别适用于在两个分支之间切换。
  7. 恢复文件:
  8.  
  9. git checkout -- <file>:将指定的 <file> 文件恢复为最近一次提交的状态。这可以用于取消工作目录中的修改。
  10.  
  11. git checkout <commit> -- <file>:将指定的 <file> 文件恢复到指定 <commit> 交中的状态。
  12.  
  13. 切换提交状态:
  14. git checkout <commit>:将工作目录和暂存区重置为指定的 <commit> 提交状态。您将进入分离头指针状态,用于查看特定提交的内容。
  15.  
  16. 切换标签:
  17. git checkout <tag-name>:将工作目录切换到指定的 <tag-name> 标签对应的提交。
  18.  
  19. 切换到特定目录:
  20. git checkout --path <directory>:将工作目录切换到指定的 <directory> 目录。这在您只希望检出仓库中的一部分内容时很有用。

   下面是常见的git checkout命令的示例用法(陈童靴只需要掌握这几个目前就够用了):

  1. 切换到另一个分支:git checkout feature-branch
  2.  
  3. 创建并切换到新分支:git checkout -b new-feature
  4.  
  5. 恢复文件到最近一次提交状态:git checkout -- file.txt
  6.  
  7. 恢复文件到特定提交状态:git checkout abc123 -- file.txt
  8.  
  9. 切换到某个标签对应的提交:git checkout v1.0

  

4,获取远程最新的提交

  本地分支创建好之后,并且切换到测试分支,就可以拉取小张的提交到远程的分支代码了,通过下面命令:

  1. git pull

  这样就可以抓取远程同事的最新提交,到本地分支。然后帮助他测试了。

5,删除自己新增的debug代码

  拉取同事的代码测试之后,如果有问题,就要反馈bug,如果问题不大,自己可以debug也是OK的,但是自己有修改则要提交到远程小张分支上,但是这时候我们本地debug的打印代码就要删除了,只留下解bug的代码。

  如何删除自己的打印测试代码呢,这时候也可以使用git checkout。

  上面介绍提到过,如果您想在Git中撤销对文件的修改(假设是 a.file),您可以使用以下命令:

  1. git checkout -- a.file

   这将撤销对 a.file 的修改,将文件恢复到最近一次提交的状态。

  如果您想要Git撤销对整个工作目录下所有文件的修改(包括新增的文件和删除的文件),可以使用以下命令:

  1. git checkout -- .

  注意:也可以使用下面命令撤销对文件的修改:

  1. git checkout a.file

  实际上 git checkout a.filegit checkout -- a.file 在大多数情况下是等效的,都可以用来撤销对文件的修改,将其恢复到最近一次提交的状态。两者的区别在于使用 -- 的情况。

  • git checkout a.file 是直接指定了文件名,Git 会将文件恢复到最近一次提交的状态。
  • git checkout -- a.file 中的 -- 是一种约定,用于分隔文件名和可能与文件名相同的分支名或提交哈希。使用 -- 可以确保 Git 将后面的内容解释为文件名而不是分支名。

  在撤销文件修改的场景下,两者的效果是一样的,您可以根据习惯选择使用哪种方式。如果文件名可能与分支名相同,使用 -- 可以避免歧义。

  请注意,这些命令会永久性地丢弃未保存的修改,所以在使用前请确保您已经保存了需要保留的修改。如果您需要更细粒度的控制,也可以考虑使用 git stash 命令来保存当前的修改,然后再恢复。

   除了上面两种用法之外,在Git中,git checkout 命令还可以还原到指定提交的状态,我们上面默认直接回退到上一次提交,而下面加上提交的哈希值就可以回退到指定版本。命令如下:

  1. git checkout <commit> -- <file>

  其中 <commit> 是提交的哈希值或者分支名,这个命令可以用来从指定的提交中获取指定文件的副本,相当于撤销该文件的所有后续修改,将其还原到指定提交的状态。

   既然要查找哈希值或分支名,那么如何做呢? 这里再补充一个概念,就是log查找。这里介绍两个命令,git log 和 git reflog。

6,补充学习:git log和 git reflog

  git loggit reflog 都是用于查看Git提交历史的命令,但它们有不同的用途和适用场景。

git log

  git log 用于查看仓库的提交历史。它会列出所有的提交记录,并按照提交时间的倒序显示,最新的提交在最上面。通过 git log 命令,你可以查看每个提交的作者、提交时间、提交消息以及提交所包含的更改。

适用场景:

  • 了解项目的提交历史,包括每个提交的详细信息。
  • 追踪项目的演变和不同版本之间的变化。
  • 查找特定提交引入的更改或问题。

  示例:

  1. git log

  当你使用 git log 命令查看Git提交历史时,会显示一系列提交记录,每个提交记录都包含有关提交的信息,如提交作者、提交时间、提交哈希、提交消息等。以下是一个示例 git log 命令的结果:

  1. commit 5c2d7f6d9b2c7809c26c704a93e4a4e9e4d77e87
  2. Author: John Smith <john@example.com>
  3. Date: Fri Aug 12 15:24:18 2022 +0300
  4.  
  5. Add new feature: user authentication
  6.  
  7. commit 9fbae82f1de89b8a1cfcf65a5e1d29e91e96f489
  8. Author: Jane Doe <jane@example.com>
  9. Date: Thu Aug 11 10:57:32 2022 -0700
  10.  
  11. Fix issue with data processing
  12.  
  13. commit 72b1a3d6f7850d03c3d8c41a013bfef49e614a96
  14. Author: Alex Johnson <alex@example.com>
  15. Date: Wed Aug 10 18:42:09 2022 +0200
  16.  
  17. Update README with installation instructions
  18.  
  19. ...

  在这个示例中,每个提交记录都包含以下信息:

  • commit: 提交的哈希值,是提交的唯一标识。
  • Author: 提交作者的姓名和电子邮件地址。
  • Date: 提交的时间戳,显示提交的日期和时间。
  • 提交消息: 描述提交所做更改的简短文本。

  通过查看这些提交记录,你可以了解项目的开发历史,包括谁在何时做了哪些更改。这对于跟踪项目的演变和查找特定更改非常有用。请注意,实际的 git log 输出可能会更长,具体的提交信息会根据项目的不同而有所变化。 

git reflog

  git reflog 用于查看本地仓库的引用日志,包括分支、HEAD、标签等的变更历史。这包括了所有的引用操作,比如分支切换、提交、合并等。git reflog 通常用于恢复误操作或找回丢失的提交。

适用场景:

  • 恢复意外删除的分支或提交。
  • 找回在分支切换或重置后丢失的提交。
  • 调查引用操作的历史,以便理解仓库状态的变化。

  示例:

  1. git reflog

  以下是一个示例 git reflog 命令的结果:

  1. 5bf6542 (HEAD -> feature-branch) HEAD@{0}: checkout: moving from develop to feature-branch
  2. 827f564 (develop) HEAD@{1}: commit: Update file1.txt
  3. e4824b3 HEAD@{2}: commit: Fix issue #123
  4. 3a17d98 HEAD@{3}: checkout: moving from master to develop
  5. 1f0b2c6 HEAD@{4}: commit: Add new feature
  6. ...

  在这个示例中,每个条目都包含以下信息:

  • 提交哈希: 当前状态的提交哈希值。
  • 分支/引用: 当前 HEAD 所指向的分支或引用(如果有的话)。
  • 操作类型和操作编号: 操作类型(commit、checkout 等)和操作的编号,这些编号可以用于执行 git resetgit cherry-pick 等操作。

   下面给一个结合 git reflog 的结果进行 Git 调用的示例:

1,恢复意外删除的分子

  假设你意外删除了一个分支,而现在想恢复它。你可以使用 git reflog 找到删除前的提交哈希,然后重新创建分支。

  1. git checkout -b recovered-branch 827f564

  这会创建一个名为recovered-branch 的新分支,并将它指向提交 827f564

2,找回丢失的提交

  如果你切换分支或进行操作后发现之前的提交消失了,你可以使用 git reflog 找回这些提交。

  1. git checkout -b temp-branch e4824b3

  这会创建一个临时分支 temp-branch 并将其指向提交 e4824b3,从而使你能够检查丢失的提交

3,撤销操作

  如果你意外执行了一个操作(如合并或重置),你可以使用 git reflog 找到之前的操作,然后通过 git reset 或其他适当的命令进行撤销。

  1. git reset --hard 1f0b2c6

  这会将当前分支重置到提交 1f0b2c6,并将工作目录和索引回滚到该提交状态。通过结合 git reflog 的结果,你可以更好地理解本地仓库的引用变更历史,并使用相应的 Git 命令进行恢复、找回或撤销操作。这对于纠正错误或恢复意外操作非常有用。

  最后总结一下:在实际使用中,git log 用于查看提交历史,帮助你理解项目的发展和更改。而 git reflog 则是在需要恢复误操作或追踪引用变更历史时使用的工具。通常情况下,你会更频繁地使用 git log,而 git reflog 则是一个辅助工具,用于处理特定的场景。

step5:等后面小陈遇到新的情况再补充吧

  希望小陈不会再犯这些小错误,当然git使用的熟悉后,可能会遇到更麻烦的事情,这时候查看git官网会更好。我这里只是简单的总结了一下小陈(一个初学者)遇到的小问题而已,如果各位看官看到了,请轻喷,谢谢!

原文链接:https://www.cnblogs.com/wj-1314/p/17436762.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号