git操作笔记,记录常用的git命令以及使用场景

发布于 2020-02-27 00:00:00

创建版本库

git clone <url>                #克隆远程版本库
git init                       #初始化本地版本库

修改和提交

git status                     #查看状态
git diff                       #查看变更内容
git add .                      #跟踪所有变更过的文件
git add <file>                 #跟踪指定的文件
git mv <old> <new>             #文件改名
git rm <file>                  #删除文件
git rm --cached <file>         #停止跟踪文件但不删除
git commit -m "commit message" #提交所有更新过的文件
git commit --amend             #修改最后一次提交

查看提交历史

git log                        #查看提交历史
git log -p <file>              #查看指定文件的提交历史
git blame <file>               #以列表方式查看指定文件的提交历史

撤销

git reset --hard HEAD         #撤销工作目录中所有未提交文件的修改内容
git checkout HEAD <file>      #撤销指定的未提交文件的修改内容
git revert <commit>           #撤销指定的提交

分支与标签

git branch                    #显示所有本地分支
git checkout <branch/tag>     #切换到指定分支或标签
git branch <new-branch>       #创建新的分支
git branch -d <branch>        #删除本地分支
git tag                       #列出所有本地分支
git tag <tagname>             #基于最新提交创建标签
git tag -d <tagname>          #删除标签

合并

git merge <branch>            #合并指定分支到当前分支
git rebase <branch>           #衍合指定分支到当前分支

远程操作

git remote -v                 #查看远程版本库信息
git remote show <remote>      #查看指定远程版本库信息
git remote add <remote> <url> #添加远程版本库
git fetch <remote>            #从远程库获取代码
git pull <remote> <branch>    #下载代码及快速合并
git push <remote> <branch>    #上传代码及快速合并
git push <remote> :<branch/tag-name> #删除远程分支或标签
git push --tags               #上传所有标签

git restore --staged和git rm --cached的区别

git restore --stagedgit rm --cached 是两个 Git 命令,用于在版本控制中操作暂存区(索引)的文件。

  1. git restore --staged:该命令用于将文件从暂存区还原到工作区,即取消暂存文件的操作。它会将暂存区中的文件恢复到与最近提交的版本相同的状态,但保留工作区中的文件内容不变。使用 git restore --staged 命令,你可以撤销已经使用 git add 添加到暂存区的文件,使它们重新变为未暂存状态。它的语法如下:

git restore --staged <file>

这将从暂存区中移除指定的文件,但保留在工作区中,相当于撤销之前的 git add 操作。

  1. git rm --cached:该命令用于将文件从暂存区中移除,但保留在工作区中。它会取消对文件的跟踪,将文件从版本控制的索引中移除。使用 git rm --cached 命令可以将已暂存的文件退回到未暂存的状态,但不会删除工作区中的文件。它的语法如下:

git rm --cached <file>

这将从暂存区中移除指定的文件,但保留在工作区中。如果你提交这个变更,文件将不再包含在下一个提交中。

总结来说,git restore --staged 用于将文件从暂存区还原到工作区,相当于撤销暂存操作,而 git rm --cached 用于将文件从暂存区中移除,但保留在工作区中,相当于取消对文件的跟踪。它们的主要区别在于 git restore --staged 是还原暂存区的操作,而 git rm --cached 是移除暂存区跟踪的操作。

git自定义账号和密码信息

因工作需要,写一段python脚本批量下载A仓库代码并提交到B仓库,并且希望该脚本在不同电脑执行都达到同样效果,此时需要解决在不同电脑上用户认证的问题。

查阅资料后发现有两种可行的办法: - 使用git客户端的全局凭证功能 - 在git仓库的url地址中直接拼接用户名和密码

这里为了方便选择直接在git 仓库url中添加用户名和密码信息,格式如下:

https://账号:密码@xxx.xxx.xxx/test.git

使用中可能因为账号和密码中包含特殊符号而报错,此时可以通过urlencode(对字符串进行URL加密来解决),比如:

https://gjx.xin@qq.com:test@xxx.xxx.xxx/test.git

这样就会报错,正确格式应该如下:

https://gjx.xin%40qq.com:test@xxx.xxx.xxx/test.git

gitlab导入外部项目问题

gitlab版本:15.5

场景一:通过git仓库url导入gitlab

测试尝试配置:管理中心=>设置=>网络=>出站请求=>钩子和服务可以访问的本地IP地址和域名中添加该域名,报如下错误

最后折腾了一券发现是nas的防火墙策略拦截了

经验技巧:

  • 通过url导入项目时,提示没有发现git仓库,url后面追加两个空格可解决。