git 命令

375 阅读7分钟

1. 记录自己用到的git命令

1. 修改远程仓库地址

1. 直接修改远程仓库地址
git remote set-url origin url

2. 删除本地远程仓库地址,然后添加新的仓库地址
git remote rm origin
git remote add origin url

查看远程仓库地址
git remote -v

`注意:git不会上传空文件`

2. remote 命令

// 查看所有远程仓库
git remote -v
// 删除远程仓库地址
git remote rm origin
// 增加远程仓库地址
git remote add origin URL
// 修改仓库名
git remote rename old_name new_name 

3. 创建项目,首次上传修改,和远程仓库建立连接:

git init   // 初始化git
// 【关联远程仓库,建议使用ssh仓库url;如果使用https需要重新设置秘钥】
git remote add origin git@github.com:leezozz/vue-model.git   // 关联远程仓库 
git add .
git commit -m '说明'  
git push -u origin master  // 推送到远程仓库

4. git stash使用

注意 git stash 没有分支概念;每次git stash之后,及时git stash pop,避免出错

// stash命令可用于临时保存和恢复修改,可跨分支
// git stash命令的作用就是将目前还不想提交的但是已经修改的内容进行保存至堆栈中,后续可以在某个分支上恢复出堆栈中的内容。

// 所有保存的记录列表
git stash list 

// 恢复 stash 保存的内容
git stash pop

5. git status -s 状态解读

A: 你本地新增的文件(服务器上没有).
C:文件的一个新拷贝.
D:你本地删除的文件(服务器上还在).
M: 文件的内容或者mode被修改了.
R: 文件名被修改了。
T:文件的类型被修改了。
U:文件没有被合并(你需要完成合并才能进行提交)。
X: 未知状态(很可能是遇到git的bug了,你可以向git提交bug report)
?:未被git进行管理,可以使用git add file1把file1添加进git能被git所进行管理
// gst 是 git status缩写
// gst -s 是 git status -s缩写

6. commit之后,想撤销commit

git add . //添加所有文件
git commit -m "本功能全部完成"
执行完commit后,想撤回commit,怎么办?
git reset --soft HEAD^

7. git fetch

1. git fetch --all 拉取远程所有分支
2. git fetch origin dev  拉取远程dev分支

8. git merge

1. git merge feat-recently  把 feat-recently 合并到当前所在分支
   ( git merge是在本地合并,需要git push到远程 )

9. git fetch和git pull区别

// git fetch和git pull区别: 远端跟踪分支不同、拉取不同、commitID不同
一、远端跟踪分支不同 
1Git fetch:Git fetch能够直接更改远端跟踪分支。 
2、git pull:git pull无法直接对远程跟踪分支操作,我们必须先切回本地分支然后创建一个新的commit提交。
二、拉取不同 
1Git fetch:Git fetch会将数据拉取到本地仓库 - 它并不会自动合并或修改当前的工作。 
2、git pull:git pull是从远程获取最新版本并merge到本地,会自动合并或修改当前的工作。 
`git fetch + git merge == git pull`
三、commitID不同 
1Git fetch:使用Git fetch更新代码,本地的库中master的commitID不变,还是等于12、git pull:使用git pull更新代码,本地的库中master的commitID发生改变,变成了2

10.撤销操作

git checkout .  // 只在本地修改(没有add操作)


git clean // 清除未被跟踪的的本地修改
**  参数说明: **
n :显示将要被删除的文件
d :删除未被添加到 git 路径中的文件(将 .gitignore 文件标记的文件全部删除)
f :强制运行
x :删除没有被 track 的文件
// 撤销 add
git reset --mixed  // 文件退出暂存区,但是修改保留
git reset HEAD .   // 撤销所有的已经 add 的文件
git reset HEAD  -filename   // 撤销某个文件或文件夹
//  撤销 commit
git add . //添加所有文件
git commit -m "本功能全部完成"
// 执行完commit后,想撤回commit,怎么办?
git reset --soft HEAD^
// 如果commit注释写错了,只是想改一下注释:
git commit --amend // 出现有注释的界面(你的注释应该显示在第一行), 输入`i`进入修改模式,修改好注释后,按`Esc`键 退出编辑模式,输入`:wq`保存并退出。ok,修改完成。

11. push本地修改并拉取代码

git add . //添加所有文件
git commit -m "本功能全部完成"
git push origin 本地分支名

git checkout dev   // 切到主分支;重新运行项目,查看刚刚写好的运行效果
git branch -D 本地分支名  // 删除本地分支
git remote prune origin  // 删除与远程建立的连接
git push origin --delete [branchname]  // 删除远程分支
git push origin :branchname   // 删除远程分支
git push origin --delete <branch1> <branch2> <branch3>
git push origin :branchname1 :branchname2  // 一次删除多个
git checkout -b 分支名  // 新建分支进行开发

12. cat

1. cat README.md (cat fileName 查看文件内容)

13. 将dist文件推送到的gh-pages分支

// 当前分支:main
// pnpm build  打包之后根目录生成dist文件夹
git add dist
git commit -m 'xxx'
git subtree push --prefix dist origin gh-pages
  • git subtree:使用Git Subtree插件。
  • push:将本地分支推送到远程分支。
  • --prefix dist:指定需要提交的目录。在这个例子中,我们将提交位于当前目录下的“dist”文件夹中的所有文件。
  • origin:指定远程仓库的名称,通常为“origin”。
  • gh-pages:指定要将代码推送到的远程分支的名称。

14. 修改分支名称

1.本地分支重命名(还没有推送到远程)

// 不在当前分支上
git branch -m oldName newName

// 在当前分支,重命名当前分支
git branch -m newName

2.远程分支重命名 (已经推送远程-假设本地分支和远程对应分支名称相同) a. 重命名远程分支对应的本地分支

git branch -m oldName newName

b. 删除远程分支

git push --delete origin oldName

c. 上传新命名的本地分支

git push origin newName

d.把修改后的本地分支与远程分支关联

git branch --set-upstream-to origin/newName

2. 错误记录

2.1 自己本地创建项目,然后github建立远程仓库,把本地仓库链接接到远程

git init    //初始化本地仓库
git remote add origin XXX     //添加远程仓库地址
  • 在此之后就 git add .
  • 就会出现这个问题(被拒绝),所以在remote add后不要着急git add,一定要先git pull origin master,出现这个原因是因为你在码云创建的仓库有ReadMe文件,而本地没有,造成本地和远程的不同步 或者是 本地数据最新了 远程数据老了 需要你消除差异
git pull origin master --allow-unrelated-histories //把远程仓库和本地同步,消除差异
// 本地解决冲突后,重新 add,commit,push,此时就OK啦

image.png

2.2 git pull origin dev (拉取主分支有警告提示)

image.png

git pull origin dev --rebase

image.png

gst  // 查看分支状态

image.png

 git add .
 git rebase --continue

image.png

gst // 查看当前分支状态

image.png

 git push origin feat/add-parts  // git push 到对应的远程分支

image.png

2.3 git pull origin dev --rebase 和 git pull origin dev 的区别

git pull origin master 
git merge多出了一个新的节点G,会将远端master的代码和本地的代码的节点合并,之前的提交会分开去显示
`git pull origin master 会被当做一次commit提交,git log会有记录`

git pull --rebase = git fetch + git rebase
git --rebase会将两个分支融合成一个线性的提交,不会形成新的节点。即git log中不会有记录

3. 本地项目推到github

3.1 本地新建【react + vite + js】项目

yarn create @vitejs/app

image.png

切到项目文件下
cd react-vite-template
在github中,创建一个 repository。填写Repository name和Description

image.png

回到本地项目,
git add .
git commit -m 'feat/config-project'
git remote add origin 远程仓库地址
git remote -v  // 查看远程仓库地址
git push -u  origin master  // 把本地仓库的内容push到远程仓库

4. 提交commit,报错提示

提示:# ERROR on lint:eslint when commit the code into local repositary
原因:git提交时的检测代码规范机制

// 在提交时加入 --no-verify参数,用来跳过检测机制
git commit --no-verify -m "提交时的注释"

5. 创建新的SSH秘钥

// 查看ssh文件夹
open /Users/admin/.ssh

// 1.生成新SSH秘钥
$ ssh-keygen -t ed25519 -C "your_email@example.com"  // 注意:如果你使用的是不支持 Ed25519 算法的旧系统。请使用以下命令:
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

// 2.将SSH密钥添加到ssh-agent 
// 在后台启动 ssh 代理 
$ eval "$(ssh-agent -s)"

// 3.如果文件不存在,请创建该文件。 
$ touch ~/.ssh/config

// 4.打开你的 ~/.ssh/config 文件,然后修改文件以包含以下行
Host github.com 
  AddKeysToAgent yes 
  UseKeychain yes 
  IdentityFile ~/.ssh/id_ed25519
  
// 5.将SSH私钥添加到 ssh-agent 并将密码存储在密钥链中。如果使用其他名称创建了密钥或要添加具有其他名称的现有密钥,请将命令中的 ided25519 替换为私钥文件的名称。
ssh-add --apple-use-keychain ~/.ssh/id_ed25519

// 6.将SSH公钥添加到 GitHub 上的帐户
// 找到设置,单击 “SSH 和 GPG 密钥”,单击“新建 SSH 密钥”或“添加 SSH 密钥”。在 "Title"(标题)字段中,为新密钥添加描述性标签。 例如,如果使用的是个人笔记本电脑,则可以将此密钥称为“个人笔记本电脑”。
// 复制新的SSH公钥
$ pbcopy < ~/.ssh/id_ed25519.pub (找对应生成的文件)
$ pbcopy < ~/.ssh/id_rsa.pub
// 在“密钥”字段中,粘贴公钥
// 单击“添加 SSH 密钥”

// 7.测试新的SSH连接:
$ ssh -T git@github.com
// 如果您收到 `Hi username! You've successfully authenticated, but GitHub does not provide shell access.` 消息,则说明您的新SSH连接已经成功配置。