【git實際應用填坑解決】

邪儿莫發表於2024-06-05

工作中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

相關文章