這篇文章主要是介紹我在使用Git中的有一些忘記了,可是很重要的命令。html
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
本地分支的重命名git
git branch -m oldbranchname newbranchnamegithub
若是想重命名當前分支shell
git branch -m newbranchname數據庫
20190311Update安全
問題是:以前 Add
和 Commit
時發現把 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 與分支名字 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
問題描述: 好比我以爲當前分支可能不適合線上的,那麼我須要來一個更加安全的分支?
實現:
git checkout -b new-branch commitId
對 指定的 CommitId
建立新分支。
git clone http://github.com/xx myName
之前一直不知道,當暫存以後使用 git diff 就無效了,今天發現居然還有這個
(在未 commit 的狀態下!)
git diff --cached git diff --staged
首先先使用 rm filename
而後再使用 git rm filename
進行記錄。
另一種狀況是,咱們想把文件從 Git 倉庫中刪除(亦即從暫存區域移除),但仍然但願保留在當前工做目錄中。 換句話說,你想讓文件保留在磁盤,可是並不想讓 Git 繼續跟蹤。 當你忘記添加 .gitignore 文件,不當心把一個很大的日誌文件或一堆 .a 這樣的編譯生成文件添加到暫存區時,這一作法尤爲有用。 爲達到這一目的,使用 --cached 選項
git rm --cached deleteName