git命令相关知识
概念
HEAD:是指向当前分支的最新提交的指针,可以在任意分支进行切换
git reset
# NOTE: git reset 时候需要指定重置到的git log hash id
# git reset --mixed(默认):回退版本后,之后提交的文件或代码在暂存区不跟踪了,转移到工作区,需要用add命令添加跟踪,然后再commit,用于未push场景
# NOTE: 没有写命令演示
# git reset --soft: 回退版本后,之后的代码或文件转移到暂存区继续跟踪,等待commit,用于未push场景
# NOTE: 没有写命令演示
# git reset --hard: 回退版本后,之后添加的代码或文件文件全部清除,包括你编辑器里新写的代码也删除,用于已push场景
# https://blog.csdn.net/weixin_44709394/article/details/120725395
git reset --hard [提交日志hash]
# 强制推送到远程,会把远程提交日志删除
git push -fgit revert
git revert [提交日志hash]:逆向指定提交的操作,起到撤销提交的效果
git reset和git revert区别
https://baijiahao.baidu.com/s?id=1714298482780121972&wfr=spider&for=pc
git status
设置git status命令显示中文
git config --global core.quotepath false无论哪个子目录都显示整个项目的状态
git status显示当前所在目录的状态
git status .显示当前所在目录的状态包括untracked文件,可参考 https://michaelheap.com/git-status-untracked/
git status -u .git lfs命令使用
ubuntu安装git-lfs
sudo apt install git-lfs使用
# pull指定文件,参考https://sabicalija.github.io/git-lfs-intro/
sudo git lfs pull --include="xxx.pdf"git clean
参考资料
How to remove files that are listed in the .gitignore but still on the repository? https://stackoverflow.com/questions/13541615/how-to-remove-files-that-are-listed-in-the-gitignore-but-still-on-the-repositor#:~:text=As the files in .,clean -xdf to execute it.
作用
用于删除被 .gitignore 但依旧在远程仓库存在的文件
相关操作
只显示将要删除的文件或者目录,不执行实际删除,-x 删除被忽略的文件,-d 删除被忽略的目录,-n 等价为 --dry-run 表示模拟输出不实际执行
git clean -xdn执行实际删除,-f 强制执行
git clean -xdfgit stash
https://www.cnblogs.com/zndxall/archive/2018/09/04/9586088.htmlhttps://stackoverflow.com/questions/1910082/git-stash-apply-version
显示 stash 列表
git stash list使用最近的提交日志内容作为暂存标识暂存修改
git stash指定暂存的名称
git stash save "test1"应用最近一次暂存
git stash apply应用指定的暂存,0为暂存的索引
git stash apply 0git clone、pull、push时指定用户名和密码
https://stackoverflow.com/questions/11506124/how-to-enter-command-with-password-for-git-pull
# 克隆仓库
git clone http://root:token-string-here123456@localhost/root/demo-devops.git
# stage所有文件
git add .
# 提交
git commit -m 'init commit'
# 推送提交到远程
git push http://root:token-string-here123456@localhost/root/demo-devops.git --all
# 拉取代码
git pull http://root:token-string-here123456@localhost/root/demo-devops.gitgit使用http、socks5代理加速
# 全局方式配置http.proxy
git config --global http.proxy 'socks5h://192.168.3.29:10080'
git config --global https.proxy 'socks5h://192.168.3.29:10080'
git config --global --unset http.proxy
git config --global --unset https.proxy
# 显示config配置
https://stackoverflow.com/questions/12254076/how-do-i-show-my-global-git-configuration
git config --list
# 每次clone指定http.proxy
# https://stackoverflow.com/questions/15227130/using-a-socks-proxy-with-git-for-the-http-transport
git clone https://github.com/cmu-db/benchbase.git --config 'http.proxy=socks5://192.168.1.55:1080'fork仓库
参考资料
NOTE
目前工作中暂时没有用到此特性,所有不深入研究。
git 显示和替换远程地址
显示远程地址
git remote -v替换远程地址
git remote set-url origin https://github.com/username/new-repo.gitGUI 客户端
GitExtensions
支持 Windows。
介绍
GitExtensions 是一个功能强大且开源的 Git 图形用户界面(GUI)工具,专为 Windows 平台设计,旨在简化 Git 的使用并提升开发效率。它提供了直观的界面和丰富的功能,使开发者能够更轻松地管理 Git 仓库、执行版本控制操作以及与团队协作。
主要特点
- 直观的图形界面 GitExtensions 提供了一个用户友好的界面,使开发者可以通过图形化操作完成常见的 Git 任务,如提交、推送、拉取、分支管理等,而无需记忆复杂的命令行指令。
- 与 Windows 资源管理器集成 它集成了 Windows 资源管理器,允许用户直接在文件资源管理器中查看 Git 仓库的状态,执行 Git 操作,而无需打开单独的应用程序。
- 与 Visual Studio 集成 GitExtensions 提供了 Visual Studio 插件,使开发者可以直接在 Visual Studio 中使用 Git 功能,无需切换工具,从而提高开发效率。
- 内置差异和合并工具 工具内置了差异(diff)和合并(merge)功能,用户可以直观地查看文件的更改,并轻松解决合并冲突。
- 子模块支持 GitExtensions 支持 Git 子模块,方便开发者管理和更新项目中的子模块,适合复杂项目的开发。
- 历史记录查看 提供了详细的提交历史记录查看功能,包括图形化的提交树(commit tree),方便用户浏览和管理项目的历史记录。
- 多语言支持 支持多种语言界面,方便全球开发者使用。
- 脚本和插件扩展 支持脚本和插件扩展,用户可以根据自己的需求定制和扩展功能。
适用场景
- 新手开发者:对于不熟悉 Git 命令行的开发者,GitExtensions 提供了直观的界面,降低了学习曲线。
- 团队协作:通过图形化界面,团队成员可以更方便地协作开发,管理分支和合并代码。
- 复杂项目管理:支持子模块和详细的历史记录查看,适合管理大型和复杂的项目。
- 集成开发环境(IDE)用户:与 Visual Studio 的集成使开发者无需离开 IDE 即可使用 Git 功能。
安装与使用
- 安装
- 下载 GitExtensions 的安装包(可从 GitHub Releases 获取)。
- 运行安装程序,按照提示完成安装。
- 安装过程中可以选择安装与 Visual Studio 的集成插件。
- 基本使用
- 克隆仓库:通过 GitExtensions 可以轻松克隆远程仓库到本地。
- 提交更改:在界面中查看修改的文件,选择要提交的文件,填写提交信息并提交。
- 推送和拉取:将本地更改推送到远程仓库,或从远程仓库拉取最新更改。
- 分支管理:创建、切换、合并和删除分支。
- 解决冲突:在合并时,如果发生冲突,GitExtensions 会提示冲突的文件,用户可以在界面中解决冲突。
优势
- 开源免费:GitExtensions 是开源软件,用户可以免费使用,并且可以根据需要自定义和扩展功能。
- 跨平台支持:虽然主要针对 Windows,但通过 Mono 等工具,GitExtensions 也可以在 Linux 和 macOS 上运行。
- 社区支持:作为开源项目,GitExtensions 拥有活跃的社区,用户可以获取帮助、报告问题或贡献代码。
总结
GitExtensions 是一个功能全面、易于使用的 Git 图形用户界面工具,特别适合 Windows 平台的开发者。它通过直观的界面和强大的功能,简化了 Git 的使用,提高了开发效率,是团队协作和复杂项目管理的理想选择。无论是新手还是有经验的开发者,都能从 GitExtensions 中受益。
安装
在 Windows 11 中安装
下载最新版本的 GitExtensions,例如:GitExtensions-x64-5.2.1.18061-0d74cfdc3.msi,根据 msi 安装程序提示安装 GitExtensions
下载最新版本 Git 客户端 链接,例如:Git-2.49.0-64-bit.exe,根据 exe 安装程序提示安装 Git 客户端
双击 GitExtensions 即可运行。
多平台换行符问题(LF or CRLF)
在不同的系统平台上使用的换行符是不一样的。UNIX/Linux 使用的是 0x0A(LF),早期的 Mac OS 使用的是 0x0D(CR),后来的 OS X 在更换内核后与 UNIX 保持一致了。但 DOS/Windows 一直使用 0x0D0A(CRLF) 作为换行符。
跨平台协作开发是常有的,不统一的换行符确实对跨平台的文件交换带来了麻烦。最大的问题是,在不同平台上,换行符发生改变时,Git 会认为整个文件被修改,这就造成我们没法 diff,不能正确反映本次的修改。还好 Git 在设计时就考虑了这一点,其提供了一个 autocrlf 的配置项,用于在提交和检出时自动转换换行符,该配置有三个可选项:
- true:提交时转换为 LF,检出时转换为 CRLF
- false:提交检出均不转换
- input:提交时转换为LF,检出时不转换
查看当前 CRLF 设置
git config core.autocrlf用如下命令即可完成 CRLF 配置:
# 提交时转换为LF,检出时转换为CRLF
git config --global core.autocrlf true
# 提交时转换为LF,检出时不转换
git config --global core.autocrlf input
# 提交检出均不转换
git config --global core.autocrlf false在 Windows 11 上把文件中的 CRLF 转换为 LF,可以通过 notepad++ 的 编辑 > 文档格式转换 > 转换为 Unix (LF) 功能转换。