【git实际应用填坑解决】

工作中git填坑之路,有时候用小乌龟,有时候也用git命令。

整理哈git相关内容。 时间不充足,就懒的把每个知识点抽出来细分了。

- git 如何管理多个项目仓库?

1. git subtree 实现管理多仓库

A、 B 、 lib 都是仓库,其他lib是公共模块,在A,B中都有使用

优点: 提交方便,直接在当前项目目录就可修改公共模块lib并提交

在项目A 和 B 中创建公共模块Common

git subtree add --prefix=src/Common https.xxx.git master

在项目中A 修改公共模块Common后提交

git subtree push --prefix=src/Common https.xxx.git master

在项目B中 拉取公共模块Common,此时也同步了commit修改的内容

git subtree pull --prefix=src/Common https.xxx.git master

操作例子:
image

2. git submodule 实现管理多仓库

缺点: submodule添加子模块lib,如修改了lib ,提交子模块必须在子模块lib的项目如lib中才行。

 git submodule add http://xxx.xxx/lib.git
 git submodule add http://xxx.xxx/module.git

3. git subtree 与 git submodule区别?

subtree与submodule的作用是一样的,但是subtree出现得比submodule晚,它的出现是为了弥补submodule存在的问题:

submodule不能在父版本库(project1,project2)中修改子版本库的代码,只能在子版本库(lib)中修改,是单向的;

submodule没有直接删除子版本库的功能;

- git版本回退

注意!!!: 当然操作需慎重,避免万劫不复...
注意!!!: head^^ 或 head~2 形式可指定回退多少

git reset 回退版本,移除不要的版本。 head指针往前移

结果:直接删除指定的commit

hard回退

  • 版本回退后,暂存区和工作区一致。 再推到远程。覆盖度之前不要的版本。并且不保留记录
git reset --hard head

soft回退

  • 版本回退后,暂存区依旧有原来的commit,实际工作区的内容依旧存在

  • 实质:就是删除最近(某个)的写错或者不想要的commit信息,但不影响工作区

  • 场景:删除最近的commit信息

git reset --soft head

git revert 撤销某次提交【回滚提交】,新建一个提交。 head指针往后移 。

结果:用一次新的commit来回滚之前的commit,在创建一个新的commit

优点:会保留完整的历史提交记录

git revert --hard head 
git revert --soft head

- 将feature分支的某个文件f.txt合并到master分支上。

git checkout master
git checkout --patch feature f.txt

- 修改历史提交代码的commit信息

1. git 如何修改最近一次的commit信息

  1. git commit --amend

  2. 进入vim操作界面之后, 点击字母键 i 然后进入INSERT模式,然后对commit信息进行修改,然后ESC 然后 :wq 保存退出

  3. 然后执行 git log 会发现最近的一次commit信息被修改成功了

2. git 修改已经提交到git远程仓库的commit信息

  1. 首先回撤到上一次提交,不修改本次提交的改动 git reset --soft HEAD~1

  2. 重新做一次提交 git commit -m “重新提交commit信息”

  3. 强推本地分支到远程仓库 git push -f origin master

  4. 查看远程仓库中的是否已经修改commit信息

git恢复 stash丢失的内容

找回丢失的STASH~

如果执行git stash pop之后将恢复的内容被手动删掉了(比如手贱点了vsCode的Discart All Changes,刚恢复的所有东西都消失了~~)

由于git stash pop恢复的同时把stash内容也删掉, 所以stash list不再会有之前的stash。

但是git stash pop出的change是可以找回的,因为每次git stash都会生成一个新的commit,只要知道commitID, 通过git stash apply commitID 就可以应用之前的stash

寻找commitID有两种方法:

1、git stash pop 最后会打印出pop掉的commitid值,若这个记录还存在直接使用即可。

2、git fsck --lost-found, 会打印出所有dangling commit,慢慢找就行了。一般是最近的几个

- git取消合并

git merge --abort

-git打标签tag

git tag
git tag -a Test1.0 -m "发布Test1.0正式版本"
git tag
git push origin Test1.0

- git 本地仓库 与 远程仓库关联遇到报错

git remote add origin https://gitee.com/xxx.git
git branch --set-upstream-to=origin/master 
git push -u origin master

1.遇到报错 failed to push some refs to 'https://gitee.com/xxx.git'

根本原因:本地 和 远程 内容不匹配 或 权限不足问题

image

解决:最好保证代码一定是最新的。

git push -f -u origin master(master为指定分支)

2. git pull时报错fatal: refusing to merge unrelated histories

image
解决:

git pull origin master --allow-unrelated-histoories
posted @ 2024-06-05 03:27  邪儿莫  阅读(1)  评论(0编辑  收藏  举报