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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM