Git
注:feature/test
表示分支名
子模块
git submodule add <url> <path>
如果本地已经提交过相关内容,会报'<path>' already exists in the index
git rm -r <path>
refusing to merge unrelated histories
解决git pull <remote> <branch> --allow-unrelated-histories
两个无关的项目合并
问题原因:
- 您已经克隆了一个项目,并且.git目录以某种方式被删除或损坏。这导致Git不了解您的本地历史记录,因此,当您尝试推入或拉出远程存储库时,它将导致它引发此错误。
- 您已经创建了一个新的存储库,并向其中添加了一些提交,现在您正尝试从已经具有自己的提交的远程存储库中提取信息。Git在这种情况下也会抛出错误,因为它不知道两个项目之间的关系。
解决方案:
在git pull
或git merge
命令之后,使用--allow-unrelated-histories修饰
git pull origin master --allow-unrelated-histories
git 本地忽略已提交的文件
在FILE处输入要忽略的文件。
git update-index --assume-unchanged FILE
如果要还原的话,使用命令:
git update-index --no-assume-unchanged FILE
# 如果是想忽略一个文件夹
git ls-files -z {{文件夹名}} | xargs -0 git update-index --assume-unchanged
# 还原文件夹
git ls-files -z {{文件夹名}} | xargs -0 git update-index --no-assume-unchanged
2
3
4
5
6
7
8
9
10
删除分支
# 删除本地分支
git branch -D feature/test
# 删除远程分支(-r表示强制删除)
git branch -D -r origin/feature/test
git push origin +fa432:feature/test
2
3
4
5
切换到远程分支
git checkout -b feature/test [--track] origin/feature/test
版本回退
reset
强制回退(Git上无任何痕迹)
假如需要回退的commitId是2beac2d
,分支名是feature/test
# 查看历史
git log
# 穿梭某个commit
git reset --hard 2beac2d
# 如果想执行回退强制合并
# git reset -p --hard 2beac2d
# 然后把这个提交强制push到远端
git push origin +2beac2d:feature/test
2
3
4
5
6
7
8
revert
revert可以只回退历史中某一笔提交,而且有历史记录
下拉指定分支指定版本
解决.git文件丢失报错问题(error object file is empty , The remote end hung up unexpectedly)
删除所有因为数据损坏导致的空物件档案(remove any empty object files)。执行第一步没有任何输出
$ find .git/objects/ -type f -empty | xargs rm
下载上一步删除的物件档案(fetch down the missing objects)
git fetch -p
做一次全面的储存物件检查(do a full object store check)
git fsck --full
将源项目代码同步到 Fork 出来的个人项目上:
代码:
#拉取Fork出来的分支
git clone Fork的分支url
#注意:进入项目根目录,执行下面操作
#查看所有远程库(remote repo)的远程url
git remote -v
#添加源分支url
git remote add upstream 替换成源项目url
#查看所有远程库(remote repo)的远程url
git remote -v
#从源分支获取最新的代码
git fetch upstream
#切换到主分支
git checkout master
#合并本地分支和源分支,本地库和远程的github原仓库同步
git merge upstream/master
#push到fork分支,本地的仓库提交到github
git push origin master
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
GitLab fork from Github
- make an empty repository in Github
- clone the empty project
git remote add upstream https://github.com/user/repo
git pull upstream master
git push origin master
.gitignore
后并删除远端存在的内容
添加git rm -r --cached 需要忽略的文件名
本地忽略某些文件(不影响远端)
git update-index --assume-unchanged [fileName] # 忽略
git update-index --no-assume-unchanged [fileName] # 还原
!git ls-files -v | grep "^[[:lower:]]" # 查看已忽略的文件
2
3
git忽略本地更改
git checkout -q -- [file&folder]
本地忽略文件夹(不影响远端)
cd 到想要忽略的文件夹,执行
git update-index --assume-unchanged $(git ls-files | tr '\n' ' ')
git log
查看信息查看两个提交之间的信息
git log --ancestry-path b37a0..97a06a --pretty=format:"%cn:%s" --no-merges
Git代理设置
针对所有域名生效:
git config –-global http.proxy {{protocol}}://127.0.0.1:{{port}}
protocol
表示代理协议,如http
,https
,socks5
等,port
指端口号
git config –-global http.url.proxy protocol://127.0.0.1:port
例如只针对github.com
设置代理,本机端口为1087
git config --global http.https://github.com.proxy http://127.0.0.1:1087
protocol error: bad pack header
针对错误git config --global pack.windowMemory "100m"
git config --global pack.SizeLimit "100m"
git config --global pack.threads "1"
2
3
所有分支
git branch -a
git cherry-pick 合并部分提交
git提交规范
- feat:新功能(feature)。
- fix/to:修复bug,可以是QA发现的BUG,也可以是研发自己发现的BUG。
- fix:产生diff并自动修复此问题。适合于一次提交直接修复问题
- to:只产生diff不自动修复此问题。适合于多次提交。最终修复问题提交时使用fix
- docs:文档(documentation)。
- style:格式(不影响代码运行的变动)。
- refactor:重构(即不是新增功能,也不是修改bug的代码变动)。
- perf:优化相关,比如提升性能、体验。
- test:增加测试。
- chore:构建过程或辅助工具的变动。
- revert:回滚到上一个版本。
- merge:代码合并。
- sync:同步主线或分支的Bug。
重新设置提交信息
git commit --amend
克隆指定分支代码
git clone -b <branch> <remote_repo>
git拉取tag代码
git checkout -b 本地分支 远程tag名 (不需要origin)
git拉取指定tag代码
clone git clone --depth 1
fetch git fetch --depth 1 origin
切换 git reset --hard
查看当前commit git rev-parse HEAD
忽略本地文件修改(只是本地生效)
忽略
git update-index --assume-unchanged web/assets/fonts/MaterialIcons-Regular.otf
还原
git update-index --no-assume-unchanged web/assets/fonts/MaterialIcons-Regular.otf
查看记录
查看某个文件更改记录 git log -- [file_path]
查看某个文件最后一次更改记录,-1改为-2就是最后2次记录 git log -1 -- [file_path]
lfs
真实文件未下载
git lfs pull --include=<file_pattern>