# 1.基本操作
git status 檢視狀态
git branch -r 檢視所有分支
git branch -D 分支名 删除本地分支
git branch --track BR_Veative origin/BR_Veative 追蹤origin分支BR_Veative并在本地建立分支BR_Veative
git checkout -b BR_Veative origin/BR_Veative 追蹤origin分支BR_Veative并在本地建立分支BR_Veative
git branch BR_Veative 建立分支
git checkout BR_Veative 切換分支
git pull --rebase pull一下
git diff <file>檢視修改
如果<file>中間有空格,需要在<file>兩邊加“”
git checkout -- <file> 放棄此次修改
git stash 剛修改檔案臨時緩存起來,然後pull代碼時不會報錯
git stash pop 接上一條指令,當pull結束後再講修改pop出來,進行add等後續操作
git add -A/<file> 添加所有檔案/file
git commit -s -m "description" commit
git push origin head:refs/for/<分支名稱> push到分支
git remote -v //檢視遠端資訊
# 2.基于Gerrit的Push方法
commit 或者push之前先pull一下
在本地将修改合并到主分支:
1)現在本地切換到主分支master
2)git fetch ssh://..........
3) git push origin head:refs/for/master
# 3.一個完整的送出循環
## 3.1 git status 檢視更改添加檔案狀态
1)git checkout -- <file> 放棄不需要修改的檔案
2)對于untracked files如果需要則下一步中添加送出,不需要則後續處理
## 3.2 git add <files>
1) git add <file> 添加單個檔案
2)git add *.unity 隻添加某一類型的檔案,如.unity檔案
3)git add --a 添加所有檔案
## 3.3 git commit -s -m"資訊" 送出以及相關資訊
1) git log 可檢視送出資訊 Q退出
2)git --amend 修改commit的資訊,并按esc然後按shift+z(兩次)退出
3)git reset --hard <commit id> 對于不需要送出的檔案如生成的untracked files可以最後統一commit,
通過reset --hard強制會退到上一次commit(<commit id>)位置,來放棄不需要的檔案
## 3.4 git pull --rebase 将遠端分支代碼拉下來合并到本地
## 3.5 git push orgin head:refs/for/分支名 将合并後的本地分支送出到遠端
**如果需要本地合并到其他主分支**
## 3.6 git checkout master 切換到主分支
## 3.7 git pull --rebase 将遠端主分支合并到本地
## 3.8 git cherry-pick <commin id> 将本地分支送出的commit合并到主分支
1) git fetch ss://.... 此步驟也可以根據gerrit送出記錄選擇cherry-pick的連結來實作
## 3.9 git push origin head:refs/for/master
## 3.10 切換到工作分支
# 4.一修改本次commit或者push
1)git log 檢視日志
2)git reset <commit id> 傳回上一次送出(此時git status 機會看到commit的檔案又重新出現)
3)把不需要的檔案checkout掉或者新加的add一下
4)git reset <commit id> 傳回本次送出(git status可以看到放棄送出的檔案,(并可以用git add))
5)git commit --amend
6) 如果需要push
# 5.pull --rebase conflict
在rebase的過程中,有時也會有conflict,這時Git會停止rebase并讓使用者去解決沖突,解決完沖突後,用git add指令去更新這些内容,
然後不用執行git-commit,直接執行git rebase --continue,這樣git會繼續apply餘下的更新檔。
在任何時候,都可以用git rebase --abort參數來終止rebase的行動,并且mywork分支會回到rebase開始前的狀态。
**解決沖突:**
1)對于文本代碼,可以在vs中直接看到錯誤的地方,直接修改即可
2)對于jar包或者場景檔案則,git status看到沖突的包(unmergerd paths),然後git reset(checkout)後就可以git rebase --continue
然後修改沖突檔案,git commit --amend一下
# 6.push [remote reject] head->refs/for/(分支名)(change XXXX closed)
1)gerrit上輸入上述提示中的XXXX,查找到與xxxx相關的已經合并
2)git status檢視發現本地比遠端多5個commit,而gerrit上顯示4個commit沒有合并,這是因為本地多出來一個commit(未知原因)與之前已經合并
的commit完全一緻,是以提示已經closed。類似問題很多,比如如果的你的本次送出的依賴在gerrit上abandoned也會出現此問題,解決方法如下:
3)先把本地修改commit一下,記錄commit id,git reset --hard到出問題的commit前一次commit,然後把gerrit上的patch依次cherry-pick下來,然後把本地的commit也
cherry-pick下來
4)push即可
# 7.push [remote reject] head->refs/for/(分支名)(no changes made)
1)伴随warning:No changes between prior commit xx and new commit xx,一般發生在cherry-pick後在送出,正常兩個commit
id相同則相當于更新commit;如果commit id不同而兩次送出内容又相同,則會報上述問題,在gerrit上随便修改一下commit message更新一下patch則可以繼續送出
# 8.missing Change-ID in commit...
1)Change-ID為gerrit生成的
2)解決方法:
**第一種:**
1)運作錯誤提示gitdir=$(git rev-parse --git-dir);scp-p -P 29418...
2)git commit commit --amend 退出即可生成Change-ID,即可送出
3)此方法使用與最新的commit丢失Change-ID的情況
**第二種**:
1)如果不是最新的一次commit丢失ID則
2)git reset回退到丢失ID的commit
3)git commit --amend 後續同第一種方法
**第三種:**
1)适用于丢失Change-ID的commit距離最新的commit較遠
2)git log 找到丢失ID的commit:如xxxxxx
3)git rebase -i commitid(為丢失change-id的commit的上一條commit) 打開預設編輯器
4)将缺失了Change-Id的commit前面的"pick"改為"reword"即可,儲存退出,git會逐個打開被你标注了reword的送出日志頁面,然後儲存退出
5)gitlog檢視change-id已經存在
方法來源:https://blog.csdn.net/u012843873/article/details/82424514
# 9.丢失Signed-off-by
git commit --amend -s
# 10.修改commit msg
git commit -"msg" --amend