git那些事

git控制台输出中文乱码

原文链接
git config --global core.quotepath false

git删除子模块

删除子模块(name 一般是仓库名,如果不确定看.gitmodules中的定义):

  1. git rm --cached <name>
  2. 编辑“.gitmodules”文件,将子模块的相关配置节点删除掉
  3. 编辑“ .git/config”文件,将子模块的相关配置节点删除掉
  4. 手动删除子模块残留的目录

git 免密 pull

https://luanlengli.github.io/2019/04/07/git-pull免密码配置.html

取消 commit版本

git reset --soft HEAD^ # 会将代码恢复到 add 之后,未 commit的状态

git reset --hard 后恢复

git reflog # 查看 commit 记录(包含 reset 掉的记录)
git cherry-pick <commit_version> # 将指定记录放入当前分支; 还有其他方式,详情见下方连接

https://mp.weixin.qq.com/s/58W1ljewwvextw05_OKE1w

删除远程分支

git push origin --delete <branch_name>

代码回滚

点击跳转原文

  1. 工作区(还未执行 git add 操作)
1. git checkout a.txt  # 丢弃指定文件的修改
2. git checkout .  # 丢弃全部修改
  1. 缓存区(已经执行了 git add 操作,但未执行 commit 操作)
1. git reset HEAD .  # 丢弃全部修改
2. git reset HEAD a.txt  # 丢弃指定文件的修改

这个命令仅改变暂存区,并不改变工作区,这意味着在无任何其他操作的情况下,工作区中的实际文件同该命令运行之前无任何变化

从缓存区剔除指定文件(相当于对指定文件撤销 add 操作)

git rm --cached <file_name>

http方式拉取代码,免账密

git config credential.helper store

会在当前项目的.git目录中生成config文件,里面有特定的一些信息,此处不详细赘述。

消除所有变更,回到指定版本

git reset --hard 版本号

消除某个文件的变更

  1. git checkout 文件路径

分支重命名

本地重命名

  1. git branch -m 原名 新

如果当前在要改的分支上,可以直接用git branch -m 新名字

远程重命名
前提: 本地有该分支,想讲远程的名字改掉

  1. git push --delete origin 分支名

git branch -avv 查看分支的对应远程关系,会发现本地还是在关联原来的远程分支

  1. git push -u origin 本地分支:远程分支

github返回801

image
这可能是你的电脑上没有安装git导致的,尝试安装git后再试。

修改某次commit的注释

  • git rebase -i HEAD~2 最后的数字2指的是显示到倒数第几次 比如这个输入的2就会显示倒数的两次注释(最上面两行) 根据提示,在你想要修改的注释前,将pick改为edit
    image
  • git commit --amend 修改注释
  • git rebase --continue 回到最新的HEAD

其实这个原理我的理解就是先版本回退到你想修改的某次版本,然后修改当前的commit注释,然后再回到本地最新的版本
原文:https://www.jianshu.com/p/098d85a58bf1

删除远端某次提交历史

  • git reset --hard <commit_hash>
  • git push origin <xx_branch> -f

使用 rebase 和 merge 的基本原则:(待测试)

下游分支更新上游分支内容的时候使用 rebase;上游分支合并下游分支内容的时候使用 merge;

例如现有上游分支 master,基于 master 分支拉出来一个开发分支 dev,在 dev 上开发了一段时间后要把 master 分支提交的新内容更新到 dev 分支,此时切换到 dev 分支,使用 git rebase master
等 dev 分支开发完成了之后,要合并到上游分支 master 上的时候,切换到 master 分支,使用 git merge dev

配置完公钥后,拉取代码提示输入密码,解决方案

系统: ubuntu
重新执行 ssh-keygen -t rsa -C "xxxxx@xxxxx.com" 命令, 当他提示你输入密码时(俗称 "盐"), 你一定要输入密码,然后, 更换公钥,重新克隆.

拉取项目的子模块

方法一: 克隆主Git时带上 --recursive 参数
git clone --recursive xxx.git
方法二: 如果项目已经克隆到了本地,执行下面的步骤
git submodule init # 初始化本地子模块配置文件
git submodule update # 更新项目,抓取子模块内容。

其他操作

  • 回退到指定commit版本。
    git reset --hard xx;
  • 删除远程的某个提交(确保还没其他人提交之前,进行强制回滚)
    git reset --hard HEAD~2
    git push -f

同步远程分支

git fetch --all  #同步提交历史
git reset --hard origin/master (这里master要修改为对应的分支名)  # 将本地的指针指向,跟远程的指针同步。
git pull origin  branch_name  # 拉取远程分支

cherry-pick

git checout master
git cherry-pick <otherBranch_commitHash>  # 将其他分支的 commitHash 记录添加到 master 分支

git cherry-pick [<options>] <commit-ish>...
常用options:
    --quit                退出当前的chery-pick序列
    --continue            继续当前的chery-pick序列
    --abort               取消当前的chery-pick序列,恢复当前分支
    -n, --no-commit       不自动提交
    -e, --edit            编辑提交信息
原文链接:https://blog.csdn.net/fightfightfight/article/details/81039050

git rebase

用于把一个分支的修改合并到当前分支
git rebase origin 同步远程分支内容到当前分支。
如果有冲突,会提示你解决冲突,你解决完后,执行

git add 文件索引   # 更新文件索引
git rebase --continue  # 继续执行合并操作。

在任何时候,可以用--abort参数来终止rebase的操作,并且当前分支会回到rebase开始前的状态。

原文链接:https://www.yiibai.com/git/git_rebase.html

posted @ 2020-02-24 23:13  Tank-Li  阅读(2520)  评论(0编辑  收藏  举报