git 命令
新建文件夹
mkdir <filename>
初始化git仓库
git init
登录git账号
一定要双引号,不然会报错
git config --global user.name "your name"
git config --global user.email "your email"
连接 git 远程仓库
git remote add origin <仓库地址>
拉取仓库报错 error: remote origin already exists.
git remote remove origin
或者手动删除 .git 文件
拉取数据
git pull origin master
拉取报错
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'https://gitee.com/xxxx.git'
原因:远程仓库的内容和本地仓库的内容对不上,比如 远程仓库有 readme 文件但是本地没有
解决办法:
git pull --rebase origin master
或者使用 --force 强制推送
将更新的文件提交到 暂存区
git add .
将暂存区的文件提交到 本地仓库
git commit -m "提交说明"
git commit 报错 ERR_PNPM_NO_IMPORTER_MANIFEST_FOUND No package.json (or package.yaml, or package.json5) was found in "xxx"
解决方法:
删除 .git/hooks/pre-commit 文件
重新执行 git commit --no-verify -m "xxx"
--no-verify : 跳过代码 eslint 检查
将更改 放入 贮藏区
git stash
// 给贮藏命名
git stash save -u 'stash name'
查看stash内容
git stash list
将更改 取出 贮藏区
git stash pop
// 将指定序号的 贮藏取出
git stash pop stash@{贮藏的index}
// 清空贮藏区
git stash clear
git stash
1. git stash save “贮藏的信息” 存贮被追踪的改动
2. git stash list 显示贮藏列表
3. git stash show stash@{序号} -p 显示某个贮藏的变动
4. git stash pop stash@{序号} 弹出某个贮藏,并在贮藏列表中删除该贮藏
5. git stash apply stash@{序号} 弹出某个贮藏,但不在贮藏列表中删除
6. git stash drop stash@{需要} 删除贮藏
7. git stash clear 清空所有贮藏
提交到 远程仓库并创建分支
git push origin master:<分支名>
将本地的仓库 推送到 远程仓库
git push origin master (需要执行两次)
// 需要下列格式的推送才能推送到 bitbucket
// 因为远程分支和本地分支没有正确关联
git push -u origin master:master
克隆仓库
git clone <仓库地址>
创建分支
git branch <分支名>
切换分支
git checkout <分支名>
创建并切换分支
git checkout -b <分支名>
// 使用 git checkout 只会创建一个本地分支,不会与远程分支关联,push 的时候加上 -u 可以关联到远程分支
git push -u origin <branch-name>
合并分支
git merge <分支名>
将 a 分支合并到 b 分支
git checkout <b 分支>
git merge <a 分支>
将 a 分支变基到 b 分支
git checkout <b 分支>
git rebase <a 分支>
查看git 提交记录
git log
git log --oneline // 提交记录在一行输出,简洁
删除某次提交记录
1. 使用 rebase
git log --oneline
git rebase -i <commit id>
//按 i 编辑文件,将 pick 修改 为 drop
// 按 esc 并输入:wq 保存并退出
// 推送代码
git push origin <分支名> --force
2. 使用 reset
// revert 的提交是 普通的提交
git reset <commit id>
// revert 的提交是 merge
git reset <commit id> -m <commit index>
// 如果 revert 的是 id 为 7e9f0b9838, 则commit index 为 1
git reset <commit id> -m 1
解决 revert 后无法再次 merge 的问题
参考:Git revert 某次merge后再重新 merge代码被丢失(第一次想merge的代码再也merge不上了)_git revert 后 再merge-CSDN博客
git checkout master
# 从master拉一个新分支 revert_tmp
git checkout -b revert_tmp
# 找到 revert 的那条提交记录,注意了,revert 相关的会有两条记录,第一条是 revert,第二条是 revert 后 merge 的记录,这里取第一条
# 用revert_tmp分支revert之前的revert
git revert <版本号>
# 再用master分支合并此分支代码推到远程即可
git checkout master
git merge revert_tmp
git push
删除分支
git branch -d <分支名>
删除远程分支
git push origin --delete <分支名>
拉取远程分支并创建本地分支
git checkout -b <分支名> origin/<分支名>
将所有文件从暂存区中取出
git reset
将指定文件从暂存区中取出
git reset <文件名>
报警告 warning: in the working copy of 'xxxx', LF will be replaced by CRLF the next time Git touches it
1、方法一
禁用git自动转换换行符的功能
git config --global core.autocrlf false
2、方法二
提交时统一转换为LF
git config --global core.eol lf
git config --global core.autocrlf input
提交时统一转换为CRLF
git config --global core.eol crlf
git config --global core.autocrlf input
注意:上述解决方案将会应用于所有的 git 仓库,
如果只想应用于当前的仓库,请将 --global 去掉
查看git 仓库状态
git status
查看gti 仓库配置
git config --global -l
git 错误信息
git pull origin master
fatal: unable to access 'https://gitee.com/xxx.git/': Could not resolve host: gitee.com
解决方法:
git config --global -l 查看配置
git config --global --unset http.proxy 删除 http.proxy 文件
git 取消指定提交
git rebase -i <commit id>
按 i 编辑文件,将 pick 修改 为 drop
按 esc 并输入:wq 保存并退出
推送代码
git push origin <分支名> --force
git 取消所有提交
git rebase -i HEAD~<commit id>
按 i 编辑文件,将 pick 修改 为 drop
按 esc 并输入:wq 保存并退出
推送代码
git push origin <分支名> --force
git 取消指定文件提交
git reset <commit id> <文件名>
git 取消所有文件提交
git reset <commit id>
git reset --hard <commit id>
git reset --hard HEAD~<commit id>
重新设置 git 地址
git remote set-url origin https://xxx.git
撤销还未 push 的 commit
git reset --soft HEAD^
HEAD^ 表示上一个版本,即上一次的commit,也可以写成
HEAD~1如果进行两次的commit,想要都撤回,可以使用HEAD~2–soft 不删除工作空间的改动代码 ,撤销 commit,不撤销
git add file–hard 删除工作空间的改动代码,撤销 commit 且撤销 add
另外一点,如果 commit 注释写错了,先要改一下注释,有其他方法也能实现,如:
git commit --amend
修改注释
git log --oneline #查看 提交ID
git rebase -i "需要修改的 提交ID 的上一个 ID"
# 将修改注释的 提交ID 的 drop 修改为 edit, 然后保存并退出
git commit --amend
# 修改注释后保存并提交
提交多行注释
git commit -m "第一行" -m "第二行"
# 提交效果("第一行" 和 "第二行" 之间会有 空行,如下所示):
# 第一行
#
# 第二行
合并多条commit
方法一:
# 查看commit信息
git log --oneline
# 从版本库恢复文件到暂存区,不改动工作区的内容
git reset --soft <需要合并的最早一个 commit 的 前一个 commit 的 id> # 别人改的commitID
# add已经跟踪的文件
git add -u
# 提交
git commit -m "修改信息"
# 强制push以替换远程仓的commitID
git push --force
方法二:
注意:
git rebase会临时创建一个新分支进行,如果弄着出错了,可以git checkout 原分支名切换回原分支之后重新git rebase。
# 查看commit信息
git log --oneline
# 将前4个commit压缩成一个commit
git rebase -i HEAD~4
# 此时会进入 vim 编辑界面
# vim编辑器,按i编辑,将后4个commit的pick修改为fixup,保留第一个pick。按esc键,输入:wq保存退出。
# pick:使用commit。
# reword:使用commit,修改commit信息。
# squash:使用commit,将commit信息合入上一个commit。
# fixup:使用commit,丢弃commit信息。
# add已经跟踪的文件
git add -u
# 提交
git commit -m "修改信息"
# 强制push以替换远程仓的commitID
git push --force
把 a 分支作为 b 分支的基线
# 切换到 a 拉取a
# 切换到 b 拉取b
# 在 b 分支下执行下列代码
git rebase a
git push -f
本地分支关联远程分支
git push -u origin <分支名>
-u选项是--set-upstream的简写,用于将当前分支与远程分支建立跟踪关系。使用-u的主要作用如下:
- 设置上游分支:当使用
git push-u origin <branch-name>时,这个命令会将当前分支推送到指定的远程仓库,并将其与远程分支关联。这样,Git 知道将来 git push 和 git pull 的默认远程分支是什么。- 简化后续操作:关联后,你在当前分支上使用 git push 和 git pull 时,不需要每次都指定远 程仓库和分支名。