git 常用命令及一些报错修复方法

176 阅读7分钟

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 index1
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 false2、方法二
提交时统一转换为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

参考: [Git] 两种方法合并多个commit为一个_goalnd 合并commit-CSDN博客

方法一:

# 查看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 时,不需要每次都指定远 程仓库和分支名。