完整项目中的文件
.gitignore
— 忽略文件:1
2
3
4node_modules //安装的项目包自然不用上传
.idea //忽略webstorm,vscode,git默认生成的文件
.vscode
.gitREADME.md
— 项目描述LICENSE
— 开源协议
上传到本地git
git init
— 初始化gitgit status
— 查看项目状态git add .
— 添加追踪当前目录所有文件(除开被.gitignore忽略的)git commit -m "简要说明"
— 提交到git版本库。可通过多个-m '说明'
来换行,编写详细更新说明,第一个-m
会作为内容标题-am
可以直接提交已追踪的文件,不用再git add
,但是新增的文件无法追踪:1
git commit -am "说明"
--amend
修改上次提交记录,进入vim后按下i
进入输入模式记得设置本地git用户名和邮箱:
1
2git config --global user.name "用户名"
git config --global user.email "邮箱"1
2
3//删除用户信息
git config --global --unset user.name "用户名"
git config --global --unset user.email "邮箱"1
2
3
4
5//清理本地账户信息
git config --system --unset credential.helper
git config --global credential.helper wincred
//清除掉缓存在git中的用户名和密码
git credential-manager uninstall
上传到远程库
将自己电脑添加公钥才能使用ssh方式上传和下载项目
将本机主分支推送到码云仓库:
1 | git remote add origin 仓库地址 //修改仓库对应远程地址 |
1 | //需要的windows凭证,用户名为邮箱 |
更新代码到远程库
命令行方式:
1 | git add . |
1 | git commit -m "说明" |
1 | git push |
vscode方式:
vscode中直接修改后,侧栏第三个图标。输入简要说明后确定,修改的文件会直接提交到本地版本库,然后选择推送自动推送到远程仓库
常用指令
基本
初始化本地库:
git init
添加远程库地址:
git remote add origin XXXXXXXXXX
origin
是仓库别名,可以自行设置,之后的命令要与之对应删除远程库地址:
git remote remove origin
查看远程库地址:
git remote -v
修改远程库地址:
git remote set-url origin xxx
添加全部文件:
git add -A
提交本地库:
git commit -m "XXXXXXXXXX"
提交远程库:
git push origin xx/远程仓储名
从远程库拉取:
git pull origin xx/远程仓储名
相当于从远程库获取最新版本并merge
合并到本地,等于:git fetch
+git merge
pull
是为了本地 commit 和远程commit 的对比记录,git 是按照文件的行数操作进行对比的,如果同时操作了某文件的同一行那么就会产生冲突,git 也会把这个冲突给标记出来:1
2
3
4
5
6<<<<<<< HEAD
冲突的本地内容
======= 上面是冲突文件本地内容,下面是冲突文件远程的内容
冲突的远程内容
>>>>>>> 850766101c945a50c2dcfd81ffab12c2d3e98fa1
pull冲突合理调整后重新再add -> commit -> pull -> push若没有冲突只会将最新的代码合并到本地
具体可看博客: https://blog.csdn.net/qq_24735877/article/details/80847372
git fetch origin master:tmp
从远程origin
的master
分支下载最新版本到tmp
分支(没有则创建)。没有tmp
则保存在FETCH_HEAD
,不会放到实际分支- 可通过
git diff tmp
对比当前分支与tmp
的差异 - 确定差异后
git merge tmp
合并,再push
- 可通过
git merge <分支名>
合并分支到当前分支,merge
时加上--squash
不会记录分支之前的commit,merge
后再commit
说明;否则不同分支的commit会交错在一起git rebase <分支名>
merge
的替代方法,但不会产生合并记录,可以保留被合并分支之前的提交记录,产生完美线性的历史记录。但是被指定分支的记录重写了当前分支历史记录。git pull --rebase
快速拉取远程并变基合并git fetch <远程主机名> <分支名>
取回特定分支的更新克隆:
git clone -b <指定分支名> <远程仓库地址>
版本回退:
git reset --hard 版本号
本地回退,再git push -f
同步远程git reset --hard HEAD~n
回退到n次提交前git reset --hard HEAD^
回退到上个版本git branch
:-v
查看所有分支,-m oldName newName
修改本地分支名称(远程需要删除重新上传)
新建分支,推送至远程分支
1.查看当前分支:$ git branch
2.查看所有分支,包含远程分支 :$ git branch -a
3.新建分支:$ git checkout -b ying
切换到当前已有的分支不加-b
4.推送本地分支到远程分支(远程分支与本地分支同名):$ git push origin ying:ying
5.让本地分支与远程分支建立关联:$ git branch --set-upstream-to=origin/ying
(注:如第五步操作未执行,拉取远程代码需执行:git pull origin ying
,需标明拉取远程的具体分支名)
6.删除本地分支:$ git branch -d ying
7.删除远程分支:
$ git push origin :ying
或 git push origin --delete ying
当远程分支冲突时push会报错:
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. ‘git pull’)
hint: before pushing again.
hint: See the ‘Note about fast-forwards’ in ‘git push –help’ for details.
使用git push origin 分支名 -f
强制提交到指定分支,慎用,会直接覆盖远程分支
修改commit信息
修改上次commit信息
1
2
3
4// 按下i开始编辑,Esc + :wq保存退出
git commit --amend
// 修改远程需要force
git push --force修改前n次commit信息
git rebase -i HEAD~n
列出前n次commit 列表找到需要修改的 commit 记录,把
pick
修改为edit
或e
,:wq
保存退出edit
是分别修改,需要多次执行后续操作,改为s
或squash
的则会一次性合并到最后一次提交修改 commit 的具体信息
git commit --amend
,保存并继续下一条git rebase --continue
,直到全部完成中间也可跳过或退出
git rebase (--skip | --abort)
回滚回退
回滚
revert
相当于撤回某次提交,会新增一个撤回的提交记录,不会影响其他提交-n
指定提交id-m
回滚合并提交时需指定保留内 1表示保留当前分支的内容
1 | git revert -n <commitID> -m 1/2 |
- 回退
reset
直接指针退回到某次提交前,之后的提交也会丢失,慎用!
工作树
git worktree list
查看当前仓库所有worktreegit worktree add <path> [<branch>]
添加工作树git worktree prune
修剪关联目录空的工作树git worktree lock
锁定工作树 git定期清除没有关联目录的worktree ,锁定后不会被定期移除git worktree unlock
锁定工作树
传输协议
SSH方式
需要本地创建SSH密钥添加到远程仓库
显示*.ssh*目录下的所有文件:
若还不存在.ssh目录,直接到下一步重新生成
若该目录下已经存在密钥对(比如,id_rsa.pub/id_rsa是一对公/私钥),可跳过下一步直接添加密钥到ssh-agent
1
ls -al ~/.ssh
生成新SSH密钥
1
ssh-keygen -t rsa -b 4096 -C "git仓库账号对应邮箱"
会弹出以下内容:
1
2可以输入新的路径修改密钥文件位置或名称;直接回车使用默认路径
Enter file in which to save the key (/c/Users/you/.ssh/id_rsa): [Press enter or new path here]1
2
3
4接下来提示输入密码,直接回车不需要密码。仍然建议输入密码,否则,任何有电脑操作权限的用户均可以直接用你的账号向仓库提交代码,而不需要任何验证
Enter passphrase (empty for no passphrase): [Press Enter or Type a passphrase here]
Enter same passphrase again: [Press Enter or Type a passphrase again here]成功后前面的目录下会生成两个新文件id_rsa.pub/id_rsa,并显示新的指纹信息
启动ssh-agent:
ssh-agent -s
1
2//windows中使用的是msysgit Bash on Windows需要使用下面指令,否则出现Could not //open a connection to your authentication agent
eval `ssh-agent -s` 或 eval $(ssh-agent -s)1
2
3
4//若出现错误1058
unable to start ssh-agent service, error :1058
//需设置ssh-agent的启动类型为自动
Set-Service -Name ssh-agent -StartupType automatic将密钥添加到ssh-agent
1
ssh-add ~/.ssh/id_rsa
将生成的SSH复制到粘贴板
1
clip < ~/.ssh/id_rsa.pub
之后登录git添加SSH KEY,对应git账号下的代码就可以用SSH协议的地址操作啦
大小写不敏感问题
如果第一此提交时文件夹是大写,之后本地修改为相同字母的小写,git不会识别。导致别人再拉取下拉可能大小写不一致了。有以下方法解决:
git config core.ignorecase
是否忽略大小写配置, 但是没有delete file , 继续执行git-add-commit之后,会发现git仓库中会同时存在大小写两个文件,需要删除对应之前的文件- 更好的办法是使用git指令修改文件名
git mv -f test.js Test.js
git就能识别文件大小写的改变了
token代替密码
2021年8月13日后,github进行身份验证时不再接收账户密码,要求基于token验证
需要到github => setting => Developer settings => Perosonal access tokens设置token:
- 要使用
token
从命令行访问仓库,请选择repo
。 - 要使用
token
从命令行删除仓库,请选择delete_repo
- 其他根据需要进行勾选
- 要使用
将token添加到远程链接中验证
1
git remote set-url origin https://<your_token>@github.com/<USERNAME>/<REPO>.git
<your_token>
换成你自己得到的token
<USERNAME>
是你自己github
的用户名
<REPO>
是你的仓库名称
commitlint
规范git提交风格
1 | git commit -m <type>[optional scope]: <description> |
type:
1
2
3
4
5
6
7
8
9
10
11
12docs: 文档
feat: 增加
mod: 修改
del: 删除
fix: 修复BUG
refactor: 重构
style: 样式内容
test: 测试
perf: 优化相关
chore: 构建或辅助工具
revert: 回滚上一版本
merge: 合并分支optional scope:一个可选的修改范围。用于标识此次提交主要涉及到代码中哪个模块。
description:description是 commit 目的的简短描述
- 本文作者: MR-QXJ
- 本文链接: https://mr-qxj.github.io/2021/09/23/git/git归纳/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!