git使用
1、克隆代码
git clone url
2、暂存更改
git add .
3、提交更改
git commit -m "提交代码"
4、将本地代码推送到远程
git push
git push -u origin test_branch
5、拉取远程最新代码
git pull
6、查看当前分支及状态
git status
7、新建分支
git branch test_branch // 只是新建分支,但是不切换到新建的分支
git checkout test_branch 切换到test_branch分支
git checkout -b test_branch2 // 新建一个分支test_branch2,并切换到该分支
8、查看分支
git branch //查看本地分支,分支前带*号的为当前分支
git branch -r // 查看远程分支,出现冒号说明没有全部显示远程分支,回车继续加载,按q退出该命令
git branch -a //查看所有分支,包括本地和远程的,会有颜色区分,如果出现冒号,则说明没有完全显示远程分支,回车会继续加载远程分支,按q则退出
git branch -vv //查看本地分支及追踪的分支
9、删除本地分支
删除本地分支test_branch2,如果当前处于test_branch2分支,则会提示无法删除分支,必须切换到其他不删除的分支才可以删除test_branch2分支
git branch // 先查看当前的分支
git checkout master //切换分支到master分支
git branch -d test_branch2 // 删除test_branch2分支 (如果当前的分支有未推送的提交或者未合并的更改,-d删除会失败,可以使用-D来强制删除,但是应该谨慎使用-D,因为不会有二次确认提示)
git branch // 可以看到test_branch2分支已经没有了
10、删除远程分支
git branch -a // 先查看分支
git push origin -d test_branch // 删除远程分支test_branch
或者也可以先删除本地的分支,然后将操作推送到远程,这样也会删除远程分支
git branch -d -r test_branch //执行这个命令后提示“未能找到远程跟踪分支”,所以先建立远程分支跟踪
git branch --set-upstream-to=origin/test_branch test_branch //提示分支test_branch设置为来自origin的远程分支test_branch
执行git branch -d -r test_branch 还是不行,还是提示未能找到远程跟踪分支,但是查看远程分支分明能看见,不知道为啥,以后有机会遇到了再查吧,使用第一种方法删除成功。
11、本地分支重命名
git branch -m old_branch new_branch //将分支old_branch重命名为new_branch
12、合并分支
将分支A合并到分支B,首先切换到分支B拉取分支B的最新代码,然后git merge 分支A,就可以将分支A合并到分支B
git merge 分支A。 //当前所在分支为分支B,执行该命令会将分支A合并到分支B
13、合并分支并将commit消息合并为一条
将分支A合并到分支B,分支A有多次commit消息,现在要将分支A的多个commit消息合并成一个,然后合并到分支B
git checkout 分支B。 // 先切换到分支B
git pull // 拉取分支B最新的代码
git merge 分支A --squash。 // 将分支A合并到分支B,如有冲突需要解决冲突
git commit -m "将分支A合并到分支B". // 分支A合并到分支B,只有一条commit消息
14、合并多条commit消息为一条,然后合并到另一个分支
上面的方法是将分支A合并到分支B,但是不会将分支A的commit消息合并到分支B,最后只commit自己输入的那条
通常情况下,可以使用13种的方法合并,比如修bug拉了一个新的分支,有多次提交,然后合并到master分支,只提交一条commit消息到master,然后把master的修改push到远端。
但是工作场景中,master一般是受保护的
这个方法是先将分支A的所有commit消息合并为一条,然后再将分支A合并到分支B,这样合并到分支B的commit消息也就只有最后总的那一条,这个方法要注意小心合漏代码,
可以先拉一个分支A的新的备份分支,将新的备份分支的commit消息合并为一条,然后将新分支合并到分支B
15、将暂时不想暂存的修改存到栈中
git stash
16、查看现有的栈
git stash list
17、将栈重新应用
git stash apply // 默认会应用最顶上的栈信息,且不会删除栈信息
git stash apply stash@{1} // 指定应用stash@{1}的栈信息
git stash pop //应用最顶上的栈信息,并且删除了栈信息(因为pop是弹出的意思嘛)
18、删除栈信息
git stash drop stash@{1} // 删除指定的栈信息
git stash clear // 删除所有的栈信息
19、显示具体的栈信息
git stash show stash@{1} // 显示具体的栈信息,即对文件的更改信息
20、查看commit信息
git log
21、从分支的某个提交处新建一个分支
从分支A的一个commit提交9aa5cc5处新拉一个新的分支test_branch3
git checkout -b test_branch3 9aa5cc5 // 会从commit提交9aa5cc5处新建一个分支test_branch3
22、撤销本地的提交
git reset HEAD~ 或者 git reset HEAD~1 //撤销上一次的提交
git reset HEAD~3 //撤销最近3次的commit提交
23、git回退到某个版本
先回退本地,再把本地的回退推到远程,这样就都回退了
git reset --hard commitId. (--hard是重置丢弃commitID之后的所有代码变化)
git push --force。 (强制push)
24、配置本地git是否大小写敏感
git config core.ignorecase 查看是否大小写敏感,true是不敏感,false是区分大小写
git config core.ignorecase false 配置git区分大小写
25、把某个文件的提交释放,变成暂存状态(有个文件提交到远程了,但是现在想重新修改了,再提交)
问题的原因就是,我的本地git不区分大小写,然后我先修改了文件的名字(从小写改成了驼峰),然后又改成了区分大小写,然后
提交代码,最后发现远程的代码有两个文件,一个小写一个驼峰,本地只有小写,现在要把远程驼峰的撤回来,让本地和远程保持一致
我重新拉了代码,先把本地改成区分大小写,然后撤销远程驼峰的文件的提交
git rm --cached /Users/xes/Desktop/personal/gitcode/work_project/talos/apidoc-vue-new/src/views/talos/performScript.vue
命令行显示 rm '/src/views/talos/performScript.vue' 表示本地撤销成功,
把这个文件删了,本地提交,push后,现在远程和本地的代码展示一致了,都没有驼峰的那个文件了。
26、查看git提交信息
git log 最新的提交在最上面,退出git log,输入大写的Q就行
27、合并多次commit为一次
我要把9fb3c到8d730之间的所有commit合并
git rebase -i 8d7306c15c1e6735e4075ae5f05a96d31d7afe79
然后页面上出现了下面的,按i进入编辑模式,将commitID是30ae和9fb3前面的pick改成squash,然后esc,然后:wq退出,然后push,就会把几次commit合并为一个,但是我这里报错了,因为有冲突
然后git rebase --continue也还是报错的,因为合并的冲突没有解决,然后vscode上当前分支名称旁边一直有一个rebasing,我现在要直接取消这次rebase
使用命令git rebase --abort 或者git rebase --skip来撤销这次rebase,执行后,分支名称旁边不再有rebasing。
上面的4个提交rebase成一个提交的时候发生了冲突,是因为合并的时候是倒着合并的,先4和3合并,然后再和2合并,最后和1合并,
4和3合并没问题,但是4和3合并后再和2合并的时候就冲突了,因为2里多了一个大写的文件不知道怎么处理,所以我打算先2和3合并,
然后4和2、3合并后的结果合并,最后和1合并,这样应该就不会再有冲突了。
28、git合并中间两次的commit为一次commit:
命令还是git rebase -i 8d7306c15c1e6735e4075ae5f05a96d31d7afe79
执行这个命令后,还是出来下面的页面,按i进入编辑模式,将中间的那个commit改为squash(pick是保留这个commit,squash是将这个commit和上一个commit合并)
(所以图2的意思就是讲30ae和8a62合并,保留8a62,保留9fb3。),然后esc退出编辑模式,:wq保存修改退出。
又因为那个文件大小写报错了,我的妈呀,不准备改了,准备拉一个新的分支,把这些commit提交到一起,把现在这个分支删掉。
29、把分支切换到某个commit下
git checkout commitID
30、解决git大小写冲突的问题
由于之前不区分大小写,然后改了文件名字,提交之后,远程有两个一样的文件,但是文件名字区分了大小写,然而本地只有一个小写的文件
这里我又将本地改成了区分大小写,所以每次提交都会冲突报错,说大写的文件会丢,但我本地又看不到大写的文件。
解决方法: 先把本地再次设置成不区分大小写,把这个文件改名为temp,实际上就是两个都改名了,然后再把本地设置成区分大小写,这个时候再把
temp文件改成小写名字,这样的话,本地git就会展示你删除了大写的文件,这样提交就不会报错了,然后远程也只会展示一个小写的文件,本地和远程就代码一致了。
参考:https://www.cnblogs.com/qianguyihao/p/15906060.html
31、更新vscode的分支
git remote update origin --prune
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)