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~ngit pull 变基和合并
bash
# git pull变基
git pull --rebasegit 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 falseGit合并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) | 提交历史回退 | 暂存区和工作区的文件被保留,变成未暂存状态 |