如果clone的時候忘記改名了
要改三個地方
本來的文件夾名字
.gitmodules中的名字
.git/modules/.....名字
.git/config
# 看樣子還是不夠,還是改回來吧!用默認的!
https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E5%AD%90%E6%A8%A1%E5%9D%97
clone
cd ./extern/fast-rtps/
git submodule add git@github.com:eProsima/Fast-RTPS.git src master
git submodule update --init --recursive
修改
cd submodule_directory
git checkout v1.0
cd ..
git add submodule_directory
git commit -m "moved submodule to v1.0"
git push
git pull
git submodule update
git submodule update --remote
git pull 之后,立即執行 git status, 如果發現 submodule 有修改,立即執行 git submodule update
盡量不要使用 git commit -a, git add 命令存在的意義就是讓你對加入暫存區的文件做二次確認,而 git commit -a 相當於跳過了這個確認過程。
git submodule foreach git submodule update
有些時候你需要對 submodule 做一些修改,很常見的做法就是切到 submodule 的目錄,然后做修改,然后 commit 和 push。
這里的坑在於,默認 git submodule update 並不會將 submodule 切到任何 branch,所以,默認下 submodule 的 HEAD 是處於游離狀態的 (‘detached HEAD’ state)。所以在修改前,記得一定要用 git checkout master 將當前的 submodule 分支切換到 master,然后才能做修改和提交。
如果你不慎忘記切換到 master 分支,又做了提交,可以用 cherry-pick 命令挽救。具體做法如下:
用 git checkout master 將 HEAD 從游離狀態切換到 master 分支 , 這時候,git 會報 Warning 說有一個提交沒有在 branch 上,記住這個提交的 change-id(假如 change-id 為 aaaa)
用 git cherry-pick aaaa 來將剛剛的提交作用在 master 分支上
用 git push 將更新提交到遠程版本庫中