git那些事
git控制台输出中文乱码
原文链接
git config --global core.quotepath false
git删除子模块
删除子模块(name 一般是仓库名,如果不确定看.gitmodules中的定义):
git rm --cached <name>
- 编辑“.gitmodules”文件,将子模块的相关配置节点删除掉
- 编辑“ .git/config”文件,将子模块的相关配置节点删除掉
- 手动删除子模块残留的目录
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> # 将指定记录放入当前分支; 还有其他方式,详情见下方连接
删除远程分支
git push origin --delete <branch_name>
代码回滚
- 工作区(还未执行 git add 操作)
1. git checkout a.txt # 丢弃指定文件的修改
2. git checkout . # 丢弃全部修改
- 缓存区(已经执行了 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 版本号
消除某个文件的变更
- git checkout 文件路径
分支重命名
本地重命名
- git branch -m 原名 新
如果当前在要改的分支上,可以直接用
git branch -m 新名字
远程重命名
前提: 本地有该分支,想讲远程的名字改掉
- git push --delete origin 分支名
git branch -avv 查看分支的对应远程关系,会发现本地还是在关联原来的远程分支
- git push -u origin 本地分支:远程分支
github返回801
这可能是你的电脑上没有安装git导致的,尝试安装git
后再试。
修改某次commit的注释
git rebase -i HEAD~2
最后的数字2指的是显示到倒数第几次 比如这个输入的2就会显示倒数的两次注释(最上面两行) 根据提示,在你想要修改的注释前,将pick
改为edit
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
开始前的状态。