天天看點

Git基本操作

# 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