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