Skip to content

Git

Git命令

shell
#删除已经追踪的文件夹
git rm -r --cached 文件夹路径
git rm -r --cached /unpackage/dist
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch -r 要删除的文件" --prune-empty --tag-name-filter cat -- --all这句的意思是从遍历所有的commit,删除那个文件,重写历史commit
git push origin --force --all 修改了忽略文件强制推送
#删除远程仓库分支
git push origin -d/--delete 远程仓库分支
#添加远程仓库地址
git remote add origin(别名) 远程仓库地址
#修改远程仓库地址
git remote set-url origin(别名) 远程仓库地址
# 编辑-键盘按i 退出保存 :wq
# 清理 npm 缓存并删除 node_modules
npm cache clean --force
rm -rf node_modules
rm package-lock.json
# 克隆指定分支
git clone -b 分支名 远程仓库地址
# 修改分支名
git branch -m oldName newName
# 暂存 使用场景:已经添加修改某分支代码,但是现在需要切换到新的分支上修改代码
git stash //这会将所有未提交的修改存储起来,并恢复工作区到干净的状态。
git stash -u //将包括未跟踪文件在内的所有修改保存到堆栈中
# 从堆栈中取出最近保存的修改并应用到当前工作区,同时将这条 stash 从堆栈中删除
git stash pop
# 如果希望保留 stash 的副本而不是删除它,可以使用 git stash apply 命令,它的作用与 git stash pop 类似,但不会从堆栈中删除该 stash。
git stash apply
# 恢复特定的 stash(如果有多个 stash 条目):这里的 git stash list 用于查看所有的 stash 条目,stash@{1} 是你希望恢复的特定 stash 条目的标识。
git stash list
git stash apply stash@{1} //取出相应的暂存,不删除
git stash drop stash@{X} //将记录列表中取出的对应暂存记录删除
# 配置git代理
git config --global http.proxy "http://127.0.0.1:8080"
git config --global https.proxy "http://127.0.0.1:8080"
# 取消代理设置
git config --global --unset http.proxy
git config --global --unset https.proxy

# git tag 标签简介
git tag --list 列出所有的标签
git tag <your_tag_name> 创建一个标签
git tag -a <your_tag_name> -m ‘your_tag_description’ 创建一个带有注释的标签
git show <your_tag_name> 查看标签信息
git ls-remote --tags origin 查看所有的远程标签及commit ID
git tag -d <your_tag_name> 删除一个标签
git push --delete origin <your_tag_name> 删除远程仓库的标签
git push origin <your_tag_name> 推送一个标签到远程
git push origin --tags 推送多个本地标签到远程
# 切换远程分支
git checkout -b demo-python remotes/origin/demo


git commit --amend 修改最近一次提交信息
git commit –amend -m “新的提交信息”

# 改更早的 commit 信息?用交互式 rebase:
git rebase -i HEAD~n

git pull 变基和合并

bash
# git pull变基
git pull --rebase

git pull 自定变基和合并

bash
# git pull默认使用变基操作
git config --global pull.rebase true
# git pull默认使用merge操作
git config --global pull.rebase false

自动变基的问题

自动变基会面临一个额外的问题:就是如果你本地文件有更改的话,变基会失败,因为变基前服务区必须是干净的。

有两种方法解决这个问题

  • git pull前,先使用git commit暂存代码
  • git pull前,先将使用 git stash将保存

假设我们代码进行了更改,但没有完全改好,我们git pull前,可以先执行git stash,此时,我们修改的代码就看不见了。我们可以使用git pull拉取代码,拉取完代码,再使用git stash pop命令,我们修改的代码又可以看见了。如果使用git pull有冲突,则合并完冲突之后,执行一下 git rebase --continue 就好了,其它和原先的用法没有任何区别。

Git中LF和CRLF

bash
#提交时转换为LF,检出时转换为CRLF
$ git config --global core.autocrlf true
#提交时转换为LF,检出时不转换
$ git config --global core.autocrlf input
#提交检出均不转换
$ git config --global core.autocrlf false

Git合并merge时,输入合并理由如何退出Please enter a commit message to explain why this merge is necessary.

按键盘字母 i 进入insert模式,.输入":wq",注意是冒号+wq,按回车键即可

回滚

git reset 不会生成新纪录,而是回到指定版本

bash
git reset # 回到指定版本

git reset各种模式

soft

bash
git reset --soft HEAD
  • 移动本地库HEAD指针
  • 重置暂存区
  • 重置工作区

归滚后不要被回滚的代码就选择

mixed

bash
git reset --mixed HEAD
  • 移动本地库HEAD指针

归滚后要被回滚的代码,被回滚的代码在暂存区,当然也可以在工作区修改被回滚的代码

hard

bash
git reset --hard HEAD
  • 移动本地库HEAD指针
  • 重置暂存区

归滚后要被回滚的代码,被回滚的代码不在暂存区,当然也可以在工作区修改被回滚的代码

keep

bash
git reset --keep HEAD
  • 移动本地库HEAD指针
  • 暂存区不变
  • 重置工作区

归滚后要被回滚的代码,被回滚的代码在暂存区,因为要重置工作区,所以暂存区和工作区会存在冲突(要解决冲突)

git revert 生成一个新的记录保存回滚的版本

git 撤销

bash
git reset

该命令的作用是:

  • 撤销暂存:所有已经 git add 的文件会变成未暂存状态。
  • 保留工作区的修改:文件内容保持不变,仍然在工作区。你可以继续提交文件或者做一些修改之后再提交文件。

add 了还 commit 了

bash
git reset --mixed HEAD~1

其中的HEAD~1是将 HEAD(当前分支的最新提交)回退到 前一个提交HEAD~1 表示“当前提交的前一个”)。

如果你做了两次commit操作(还没有push),HEAD~2即可以回退这两次提交。

该命令的作用是

  • 保留工作区内容:文件内容不会丢失,工作区的文件仍然保留,而且它们变成了未暂存的状态
  • 撤销暂存区的内容:当前提交中所有已暂存的内容会被从暂存区移除,但仍然保留在工作区。
命令作用提交历史变化文件变化(工作区和暂存区)
git reset --mixed HEAD什么都不做,撤回暂存区的更改(撤回add)不变暂存区的文件被撤回到工作区,变成未暂存状态
git reset --mixed HEAD~1回退到前一个提交,撤销最近的提交(撤回commit)提交历史回退暂存区和工作区的文件被保留,变成未暂存状态