GIT非常見命令使用筆記

kylinfish發表於2015-04-10

1:修改已經提交N次程式碼的user.name和user.email

解決我在多電腦間,使用不同賬戶,git config 的global,system,local配置忽略改動,而新增了多臺電腦ssh key的預設提交問題。

#分兩次複製執行以下兩行

git filter-branch -f --env-filter "GIT_AUTHOR_NAME='wujuguang'; GIT_AUTHOR_EMAIL='1154545932@qq.com';
GIT_COMMITTER_NAME='wujuguang'; GIT_COMMITTER_EMAIL='1154545932@qq.com';" HEAD

#強制更新

git push origin master -f

 

2:某分支提交合到另分支上
在本地 dev 分支上的一個commit,如何把它放到本地ky-dev分支上?

git使用cherry-pick. 
簡單用法:git cherry-pick <commit id>

Apply the changes introduced by some existing commits.
就是對已經存在的commit 進行apply (可以理解為再次提交)

checkout 到這個 dev 分支,使用 git log 獲取這個 commit 的 <commit id>,假定為 6211d4912ec6752ee39b1c7b3ef9c76d01c2a49e,然後執行以下:
$ git checkout ky-dev
$ git cherry-pick 6211d4912ec6752ee39b1c7b3ef9c76d01c2a49e
$ git log

3:減少無用Merge訊息的干擾

 如果您正在團隊中工作並且整個團隊都在同一條branch上面工作,那麼您就得經常地進行fetch/merge或者pull。Git中,分支的合併以所提交的merge來記錄,以此表明一條feature分支何時與主分支合併。但是在多團隊成員共同工作於一條branch的情形中,常規的merge會導致log中出現多條訊息,從而產生混淆。因此,您可以在pull的時候使用rebase,以此來減少無用的merge訊息,從而保持歷史記錄的清晰。
    
  git pull --rebase

您也可以將某條branch配置為總是使用rebase推送:
    
  git config branch.BRANCH_NAME_HERE.rebase true

 

4,修改commit的內容,包含最近一次,和任意某個commit兩種情況

git修改last提交:
  在git中,其commit提供了一個--amend引數,可以修改最後一次提交的資訊.
  但是如果你已經push過了,那麼其歷史最後一次,永遠也不能修改了。

  git commit --amend 的用法,shell下 git commit --amend 然後在出來的編輯介面,直接編輯註釋的資訊。

git修改歷史提交:
       git使用amend選項提供了最後一次commit的反悔。但是對於歷史提交呢,就必須使用rebase了。
       git rebase -i HEAD~3
       表示要修改當前版本的倒數第三次狀態。

       這個命令出來之後,會出來三行東東:
        pick:*******
        pick:*******
        pick:*******
        如果你要修改哪個,就把那行的pick改成edit,然後退出。

        這時通過git log你可以發現,git的最後一次提交已經變成你選的那個了,這時再使用:
        git commit --amend
        來對commit進行修改。

        修改完了之後,要回來對不對?
        使用git rebase --continue
        OK,一切都搞定了

5,刪除遠端分支

  git push origin :branch-name
  冒號前面的空格不能少,原理是把一個空分支push到server上,相當於刪除該分支。

6,Git Tag相關

git push origin --tags

git tag -a 0.1 -m ""  66338cc
git tag -a 0.2 -m ""

git tag -u "" -a 0.1 -m ""  66338cc
git tag -u "" -a 0.2 -m ""

gpg --gen-key
gpg --list-keys
gpg --list-secret-keys
git push origin :refs/tags/v

git fetch --tags

 

相關文章