Git 平常工做中使用的命令記錄

前言

  這篇文章主要是介紹我在使用Git中的有一些忘記了,可是很重要的命令。html


20190424 Git 歷史信息 username 和 email 更改

git config alias.change-commits '!'"f() { VAR=\$1; OLD=\$2; NEW=\$3; shift 3; git filter-branch --env-filter \"if [[ \\\"\$\`echo \$VAR\`\\\" = '\$OLD' ]]; then export \$VAR='\$NEW'; fi\" \$@; }; f "
git change-commits GIT_AUTHOR_NAME "old name" "new name"
git change-commits GIT_AUTHOR_EMAIL "old@email.com" "new@email.com" HEAD~10..HEAD

20190314

本地分支的重命名git

git branch -m oldbranchname newbranchnamegithub

若是想重命名當前分支shell

git branch -m newbranchname數據庫

20190311Update安全

如何在已存在的倉庫裏添加gitigonore

問題是:以前 AddCommit 時發現把 bin 和 obj 文件包含進去了,後來再加了 .gitignore 發現沒用了。解決問題以下bash

git rm -r --cached . 
git add .
git commit -am "Remove ignored files"

20171127更新服務器

分支

查看各個分支所指的當前對象fetch

git log --oneline --decorate

git log --oneline --decorate --graph --all //輸出你的提交歷史,各個分支的指向,以及項目分支分叉的狀況
git merge [branchname] 把 branchname 合併到當前分支

遇到衝突時分支的合併

任何因包含合併衝突而有待解決的文件,都會以未合併狀態標識出來。 Git 會在有衝突的文件中加入標準的衝突解決標記,這樣你能夠打開這些包含衝突的文件而後手動解決衝突。 出現衝突的文件會包含一些特殊區段,看起來像下面這個樣子:url

<<<<<<< HEAD:index.html <div id="footer">contact : email.support@github.com</div> ======= <div id="footer">  please contact us at support@github.com </div> >>>>>>> iss53:index.html

這表示 HEAD 所指示的版本(也就是你的 master 分支所在的位置,由於你在運行 merge 命令的時候已經檢出到了這個分支)在這個區段的上半部分( ======= 的上半部分),而 所要合併分支所指示的版本在 ======= 的下半部分。 爲了解決衝突,你必須選擇使用由 ======= 分割的兩部分中的一個,或者你也能夠自行合併這些內容。 例如,你能夠經過把這段內容換成下面的樣子來解決衝突:

查看每個分支的最後一次提交

git branch -v 

git branch --merged / --no-merged  查看已經合併或者未合併的分支


git branch -d / -D(強制刪除)

Origin 並沒有特殊含義

遠程倉庫名字 origin 與分支名字 master 同樣,在 Git 中並無任何特別的含義同樣。 同時 master 是當你運行 git init 時默認的起始分支名字,緣由僅僅是它的普遍使用, origin 是當你運行 git clone 時默認的遠程倉庫名字。 若是你運行 git clone -o booyah ,那麼你默認的遠程分支名字將會是 booyah/master 。

2017 11 23 更新

查看文件提交歷史

git log
git log -p //顯示每次提交的內容差別
git log --stat  //顯示每次提交的簡略的統計信息
git log --pretty=format:"%h - %an, %ar : %s"

限制輸出長度

git log --sine=2.weeks
git log -<n> 顯示 前 n 條提交
git log --author 指定做者的提交
git log -SFunctionName 能夠列出那些添加或移除了某些字符串的提交

撤銷相關操做

撤銷剛剛的一個提交

git commit --amend //因爲commit 信息寫錯,好像常常用

取消暫存文件

當你使用 git add * 時,發現添加了不該該暫存的文件,能夠用下面的來取消暫存

git reset HEAD <file>

git checkout -- <file> //取消對一個未加入暫存區文件的修改

遠程倉庫

添加一個遠程倉庫
git remote add <shortname> <url>
git remote add pb https://github.com/paulboone/ticgit

從遠程倉庫抓取與拉取

git fetch [remote-name] //git fetch origin


git push [remote-name] [branch-name]


查看遠程倉庫
git remote show [remote-name]

遠程倉庫的移除與重命名
git remote rename <originName> <afterName>

git remote rm <remote-name>

標籤

git tag 列出標籤

Git 使用兩種主要類型的標籤: 輕量標籤(lightweight) 與 附註標籤(annotated)。

一個輕量標籤很像一個不會改變的分支-它只是一個特定提交的引用。

附註標籤是存儲在Git數據庫中的一個完整對象。它們是能夠被校驗的;其中包含打標籤者的名字、電子郵件地址、日期時間;還有一個標籤信息;而且可使用GNU Privacy Guard (GPG) 簽名與驗證。

附註標籤

git tag -a v1.4 -m 'my version 1.4'

git show 能夠看到標籤信息對應的提交信息

輕量標籤

git tag v1.4-lw

給之前的提交打標籤

git tag -a v1.2 9fsdfdasfa  某個提交的校驗和的值

推送標籤

git push origin v1.2 推送指定標籤

git push origin --tags 一次性推送把全部不在遠程倉庫服務器上的標籤所有推送過去

在特定標籤上建立一個新分支
git checkout -b [branchname] [tagname]
git checkout -b version2 v3.3.0

如何跳轉到指定的 commit

  問題描述: 好比我以爲當前分支可能不適合線上的,那麼我須要來一個更加安全的分支?

實現:

git checkout -b new-branch commitId

對 指定的 CommitId建立新分支。

克隆遠程倉庫的時候自定義本地倉庫名字

git clone http://github.com/xx myName

使用 git status -s 能夠看見狀態的簡寫版本,以下所示

查看已暫存的文件差別比較

之前一直不知道,當暫存以後使用 git diff 就無效了,今天發現居然還有這個
(在未 commit 的狀態下!)

git diff --cached
git diff --staged

移除文件

首先先使用 rm filename 而後再使用 git rm filename 進行記錄。

另一種狀況是,咱們想把文件從 Git 倉庫中刪除(亦即從暫存區域移除),但仍然但願保留在當前工做目錄中。 換句話說,你想讓文件保留在磁盤,可是並不想讓 Git 繼續跟蹤。 當你忘記添加 .gitignore 文件,不當心把一個很大的日誌文件或一堆 .a 這樣的編譯生成文件添加到暫存區時,這一作法尤爲有用。 爲達到這一目的,使用 --cached 選項

git rm --cached deleteName

相關文章
相關標籤/搜索