Gerrit是什麼?
Gerrit實際上一個Git伺服器,它為在其伺服器上託管的Git倉庫提供一系列許可權控制,以及一個用來做Code Review的Web前臺頁面。當然,其主要功能就是用來做Code Review.
如何配置Gerrit使用的SSH
1.使用gitbash檢視是否已經有了ssh金鑰:cd ~/.ssh
2.生成ssh金鑰:
$ ssh-keygen -t rsa -C “你想設定的使用者名稱”複製程式碼
3.生成金鑰後要求設定密碼,可按Enter鍵跳過
4.登入你的Gerrit網站,將生成的.ssh資料夾下的公鑰id_rsa.pub中的內容貼上到setting–SSH Public Keys中即可
5.你可能還需要給ssh新增一個無格式的配置檔案config
config檔案中具體需要寫入什麼配置請詢問你們搭建gerrit服務的同事。完成後你就可以正常使用Gerrit了.
Gerrit的日常使用
使用git命令拉取程式碼,git命令從gerrit專案中獲取,獲取clone地址時選中“clone with commit-msg hook”和“SSH”。開啟gitbash進行程式碼下載。
下載完成後注意檢查commit-msg檔案是否下載成功,如果沒下載到,請自行前往gerrit下載,並放到專案目錄下,如下圖
commit-msg檔案是用於為每次commit自動生成唯一的changeId。
Push命令:git push origin Head:refs/for/branch 這裡的branch是指你想要提交到的分支名
Gerrit使用中可能遇到的問題
-
gerrit通過給每個獨立的commit加上一個唯一的changId來保證有序的程式碼提交和review,多次commit攜帶相同的changid視為對同一次commit的修改,如果commit沒有攜帶changid的話則無法push成功,所以當push失敗的時候第一件事應該是檢查當前的commit是否都帶有changid。如果僅最後一次commit沒有changid,可使用git commit –amend,此命令的作用就是將最新一次commit指向上一次帶有changid的commit,如果含多條commit都沒有changid的話,可以checkout這些commit然後逐條新增changid,或者rebase到最後一次有效的commit然後重新編輯提交.
-
由於某次commit攜帶的使用者資訊與gerrit網站上的配置不相同而導致push失敗時,使用git命令檢查或更換本地賬號:
檢視使用者名稱和郵箱地址: $ git config user.name $ git config user.email 修改使用者名稱和郵箱地址 $ git config --global user.name "xxxx" S git config --global user.email "xxxx"複製程式碼
當然,你也可以直接修改git的配置檔案,開啟全域性的.gitconfig檔案的命令為:vi ~/.gitconfig.
-
聽說stackoverflow上”如何在vim下儲存並退出”這個問題已經有一百萬+的訪問量了,趕緊記錄下操作:esc退出編輯模式,然後冒號:wq即可.
以下為新增轉載內容:
Git撤銷commit的操作命令: git reset –hard HEAD^
一、新建三個檔案,demo1,demo2,demo3
二、git add 命令提交到暫存區,git reset HEAD demo1就是把提交到暫存區裡的檔案撤銷。
上圖中,執行git reset HEAD demo1就會把demo1從暫存區中撤銷,現在是untracked.
三、git commit 提交本地倉庫
上圖中顯示,git commit把demo2,demo3提交到本地倉庫中。
四、現在想撤銷之前的commit,可以用git reset –hard HEAD^命令
第三步中,先commit demo2,再commit demo3,因此現在的HEAD即是demo3的commit值。
(HEAD是指向最新的提交,上一次提交是HEAD^,上上次是HEAD^^,也可以寫成HEAD~2 ,依次類推)
因此git reset –hard HEAD 就是把最新提交的demo3撤銷掉,撤銷是非常徹底的,本地檔案也會刪除。
有時候使用Git工作得小心翼翼,特別是涉及到一些高階操作,例如 reset, rebase 和 merge。甚至一些很小的操作,例如刪除一個分支,我都擔心資料丟失。
不久之前,我在做一些大動作(rebasing)之前,我總是備份整個版本庫,以防萬一。直到最近我才發現git的歷史記錄是不可修改的,也就是說你不能更改任何已經發生的事情。你做的任何操作都只是在原來的操作上修改。也就是說,即使你刪除了一個分支,修改了一個提交,或者強制重置,你仍然可以回滾這些操作。
讓我們來看一些例子:
$ git init$ touch foo.txt$ git add foo.txt$ git commit -m "initial commit"$ echo 'new data' >
>
foo.txt$ git commit -a -m "more stuff added to foo"複製程式碼
你現在看git的歷史記錄,你可以看到兩次提交:
$ git log* 98abc5a (HEAD, master) more stuff added to foo* b7057a9 initial commit複製程式碼
現在讓我們來重置回第一次提交的狀態:
$ git reset --hard b7057a9$ git log* b7057a9 (HEAD, master) initial commit複製程式碼
這看起來我們是丟掉了我們第二次的提交,沒有辦法找回來了。但是reflog就是用來解決這個問題的。簡單的說,它會記錄所有HEAD的歷史,也就是說當你做 reset,checkout等操作的時候,這些操作會被記錄在reflog中。
$ git reflogb7057a9 HEAD@{0
}: reset: moving to b7057a998abc5a HEAD@{1
}: commit: more stuff added to foob7057a9 HEAD@{2
}: commit (initial): initial commit複製程式碼
所以,我們要找回我們第二commit,只需要做如下操作:
$ git reset --hard 98abc5a複製程式碼
再來看一下 git 記錄:
$ git log* 98abc5a (HEAD, master) more stuff added to foo* b7057a9 initial commit複製程式碼
所以,如果你因為reset等操作丟失一個提交的時候,你總是可以把它找回來,除非你的操作已經被git當做垃圾處理掉了,一般是30天以後。