Git实用操作
1、分支重命名后本地项目修改(这里是main改为master)
1 | git branch -m main master |
2、Github仓库重命名后本地如何提交
本仓库路径下执行:git remote -v,显示只有一个:origin
在本地仓库删除远程仓库:git remote rm origin
本地添加远程仓库地址:
1 | git add README.md |
提交:git push origin master
3、github文件夹有白色箭头且无法打开的解决方法
- clone到本地的这个文件夹中有一个.git的隐藏文件夹,可能内含了一些原始信息,导致将其push到GitHub后会被自动识别成一个子模块。
- 解决步骤 在资源管理器“查看”中勾选“隐藏项目”,并删去这一子模块文件夹下的.git隐藏文件夹 执行命令git rm –cached <文件夹名> 执行git add <文件夹名> ……之后的操作一样。
4、克隆分支
1 | git clone -b 分支名 仓库地址 |
5、清理缓存
1 | git rm -r --cached . |
6、Git的撤销操作详解
6.1 常用撤销操作
单个文件撤销:
撤销工作区单个文件修改
git checkout <file>
将文件恢复到最近一次提交的状态,撤销本地未提交的修改。
撤销单个文件暂存
git reset HEAD <file>
从暂存区移除指定文件,但不影响本地工作副本。
撤销工作区和暂存单个文件修改
git checkout HEAD <file>
撤销文件在工作区和暂存区的所有修改,使文件内容回到最新的提交状态。
所有的文件撤销:
撤销掉最近一次提交,不知道是否会保留本地的修改
git reset HEAD^
默认使用
--mixed
选项,即git reset HEAD^ --mixed
修改最近一次提交的信息,注意这只是修改提交信息,并不是删掉最近一次提交。
git commit --amend
修改最后一次提交的信息。
撤销最近一次暂存操作
git reset HEAD
从暂存区撤销,但不影响工作空间。
撤销最近的工作空间修改
git reset --hard HEAD
回滚到最新提交,撤销所有未提交的修改。
回滚到任意版本
git reset --hard <commit>
将HEAD恢复到指定commit,撤销更改操作。
6.2 工作区和暂存区
工作区(Working Directory):
是项目本地目录下的实际文件,这些文件可以被编辑,但未经提交不会被保存到仓库中。
每一个文件都处于三种状态之一:已修改(modified)、已暂存(staged)或未修改(unmodified)。
暂存区(Staging Area/Index):
是git与工作区之间的缓冲区,为下一步提交做准备。
将工作区己修改的文件内容添加到暂存区后,这些变更才会纳入下一次提交操作当中。
两者的关系和作用:
开发人员在工作区修改文件。
运行
git add
将文件添加到暂存区,摘要修改内容。运行
git commit
将暂存区内容提交到仓库的当前分支。
所以:
工作区是实际文件修改操作的地方。
暂存区是准备提交的中间区域,把将要提交的修改从工作区提取出来使之成为完整的变化提交。
git add 命令将文件从工作区提交到暂存区。
git commit命令用于将暂存区中的文件修改正式提交到仓库本地分支。
6.3 撤销命令中<file>
介绍
表示你需要撤销的具体文件,可以是单个文件或者多个文件名用空格隔开。 对于具体文件名,需要包含文件后缀。比如:
1 | test.py |
- 如果是路径下的文件,可以使用相对路径或绝对路径指定:
1 | ./src/main.js |
- 通配符可以用于撤销目录下的所有文件:
1 | images/*.jpg |
- 无文件名默认为当前目录下的所有文件:
1 | git reset HEAD |
所以在git撤销命令中:
位置需要填写具体文件名包含后缀或者路径 - 支持通配符和不填写默认当前目录等情况
- 保证清楚指定了要撤销的特定文件或文件组
7、删除远程仓库地址
- 查看当前所有远程地址
1 | git remote -v |
- 删除指定远程地址
1 | git remote rm origin |
替换origin为要删除的远程地址名。
- 更新本地仓库配置
删除.git/config文件中的对应远程地址段落。
1 | [remote "origin"] |
- 推送删除
1 | git push origin --delete |
- 删除缓存记录
1 | git remote prune origin |
通过以上步骤可以完成远程仓库的删除操作,包括本地和远程端的连接信息。之后就不会再与之前的远程仓库进行同步操作了。如果需要重连其他仓库,可以添加新的远程地址。
8、git merge、git rebase和git squash
三个命令的主要区别如下:
- git merge
git merge会将两个分支的修改合并成一个新的commit,保留两个分支的修改历史。
执行git merge后分支图会呈现一个新的节点,表示合并后的结果。
- git rebase
git rebase操作是将分支重放到另一个分支上,看上去就像该分支从该分支直线发散出来一样。
执行git rebase后分支的历史会被整体前移,新的commit都会被放在目标分支above。
- git squash
git squash会将多个commit squashed成一个commit。
执行git squash后历史记录会被整合成一个新的commit,以简化历史。
总结:
git merge保留分支的历史,产生一个新的合并commit。
git rebase将分支前移到目标分支上,改变原分支的历史感觉。
git squash将多个commit squash成一个commit,简化历史。
所以git merge保留所有信息,git rebase和squash都会对历史记录进行修改和整理。
9、Git的堆栈操作
git stash的主要作用是临时存储当前工作目录下的所有修改,允许开发者在不提交代码的情况下切换分支或者存储现场。 git stash pop的作用是将最新的stash恢复到工作区,同时将该stash从列表中移除。
其他相关命令:
- git stash save :存储并添加备注
- git stash list:查看堆栈记录
- git stash apply:只将stash应用到工作区,但stash记录会保留在列表中。
- git stash clear:清空堆栈
- git stash drop:直接删除最新的暂存项
- git stash drop stash@{0}:删除指定的某个stash
- git stash clear:清空堆栈
- git stash show:查看记录内容
- git stash branch :将一个stash应用到一个新分支中,决定将改动提取成一个新功能分支
题目: 小张正在开发新功能中,工作还没有完成,但是临时有更高优先级的Bug需要修复。这时他需要先保存当前工作,然后切换到主分支修复Bug。之后再回来继续之前的工作。请思考小张可以使用哪些git stash命令来实现这一工作流程。
解答:
- 小张首先需要使用git stash命令将当前未完成但未提交的修改暂时存放起来,以便切换分支后不影响工作环境。
- 使用git stash保存当前修改后,小张可以用git stash list查看是否成功存放。
- 然后小张可以git checkout主分支,开始修复Bug工作。
- Bug修复完后,小张用git checkout切回之前开发分支。
- 最后使用git stash pop,将之前保存的修改应用回来,然后继续之前未完成的工作。
总结:git stash 是在A分支保存的工作现场,然后切换到B分支工作完成后,再回到A分支时需要使用git stash pop才能还原到切换到B分支之前的工作现场。
如果没有使用git stash 保存A分支未提交的修改就切换到B分支操作,再切换回A分支,此时A分支之前未提交的修改就会丢失。
10、在已有代码中新建空分支提交本地代码
1 | git remote add origin git@github.com:用户名称/仓库名称.git |