1、分支重命名后本地项目修改(这里是main改为master)

1
2
3
4
git branch -m main master
git fetch origin
git branch -u origin/master master
git remote set-head origin -a

2、Github仓库重命名后本地如何提交

本仓库路径下执行:git remote -v,显示只有一个:origin

在本地仓库删除远程仓库:git remote rm origin

本地添加远程仓库地址:

1
2
3
git add README.md
git commit -m "first commit"
git remote add origin http://XX/test.git

提交: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 常用撤销操作

单个文件撤销:

  1. 撤销工作区单个文件修改

    git checkout <file>

    将文件恢复到最近一次提交的状态,撤销本地未提交的修改。

  2. 撤销单个文件暂存

    git reset HEAD <file>

    从暂存区移除指定文件,但不影响本地工作副本。

  3. 撤销工作区和暂存单个文件修改

    git checkout HEAD <file>

    撤销文件在工作区和暂存区的所有修改,使文件内容回到最新的提交状态。

所有的文件撤销:

  1. 撤销掉最近一次提交,不知道是否会保留本地的修改

    git reset HEAD^

    默认使用--mixed选项,即git reset HEAD^ --mixed

  2. 修改最近一次提交的信息,注意这只是修改提交信息,并不是删掉最近一次提交。

    git commit --amend

    修改最后一次提交的信息。

  3. 撤销最近一次暂存操作

    git reset HEAD

    从暂存区撤销,但不影响工作空间。

  4. 撤销最近的工作空间修改

    git reset --hard HEAD

    回滚到最新提交,撤销所有未提交的修改。

  5. 回滚到任意版本

    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
2
test.py
README.md
  • 如果是路径下的文件,可以使用相对路径或绝对路径指定:
1
2
./src/main.js
/Users/name/project/file.txt
  • 通配符可以用于撤销目录下的所有文件:
1
images/*.jpg 
  • 无文件名默认为当前目录下的所有文件:
1
git reset HEAD 

所以在git撤销命令中:

  • 位置需要填写具体文件名包含后缀或者路径
  • 支持通配符和不填写默认当前目录等情况
  • 保证清楚指定了要撤销的特定文件或文件组

7、删除远程仓库地址

  1. 查看当前所有远程地址
1
git remote -v
  1. 删除指定远程地址
1
git remote rm origin

替换origin为要删除的远程地址名。

  1. 更新本地仓库配置

删除.git/config文件中的对应远程地址段落。

1
2
3
[remote "origin"]
url = git@github.com:username/repo.git
fetch = +refs/heads/*:refs/remotes/origin/*
  1. 推送删除
1
git push origin --delete
  1. 删除缓存记录
1
git remote prune origin

通过以上步骤可以完成远程仓库的删除操作,包括本地和远程端的连接信息。之后就不会再与之前的远程仓库进行同步操作了。如果需要重连其他仓库,可以添加新的远程地址。

8、git merge、git rebase和git squash

三个命令的主要区别如下:

  1. git merge
  • git merge会将两个分支的修改合并成一个新的commit,保留两个分支的修改历史。

  • 执行git merge后分支图会呈现一个新的节点,表示合并后的结果。

  1. git rebase
  • git rebase操作是将分支重放到另一个分支上,看上去就像该分支从该分支直线发散出来一样。

  • 执行git rebase后分支的历史会被整体前移,新的commit都会被放在目标分支above。

  1. 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
2
3
4
5
git remote add origin git@github.com:用户名称/仓库名称.git
git checkout --orphan 分支名称
git add .
git commit -m "init"
git push origin 分支名称