git 命令總結

創建
git init 創建空的repository

git add fileName 添加修改的文件,把文件修改添加到暫存區

git commit -m '提交的消息' 把暫存區的所有內容提交到當前分支

git diff commitId1 commitId2 查看兩次提交的區別

git diff commitId1:fileName commitId2:fileName 查看兩次提交的文件的區別
分支
git branch 查看分支

git branch branchName 創建分支

git checkout branchName 切換到branchName分支

git checkout -b branchName創建並切換到branchName分支

git checkout -b branch-name origin/branch-name 在本地創建和遠程分支對應的分支

git merge branchName 把branchName分支合併到當前分支

git branch -d branchName 刪除branchName分支,注意不要在branchName分支上做這個操作

git branch --set-upstream branch-name origin/branch-name 建立本地分支和遠程分支的關聯
git 重新關聯遠程地址
git remote set-url origin 遠程地址
git remote -v
然後再把項目推送過去
git  push origin 遠程分支
查看修改
git status 查看當前狀態,有哪些改動

git diff fileName 查看文件修改的內容

git diff HEAD -- fileName 查看文件fileName工作區和版本庫最新版本的區別
查看提交歷史
git log 查看提交歷史

git log --pretty=oneline 查看log,一行一行地顯示

git reflog 查看git操作記錄
創建ssh key
ssh-keygen -t rsa -C "[email protected]" //生成一對公鑰id_rsa.pub 私鑰id_rsa

cat ~/.ssh/id_rsa.pub //查看生成的公鑰
遠程倉庫
Git支持多種協議,包括https,但通過ssh支持的原生git協議速度最快

git remote add origin remoteUrl 遠程建了一個空倉庫,連接本地到遠程(remoteUrl是遠程倉庫的地址)

git push origin master 把本地分支master 推送到遠程

git clone remoteUrl 克隆一個遠程已存在的倉庫到本地(remoteUrl是遠程倉庫的地址)
標籤管理
git tag tagName 爲當前分支打名字爲tagName的標籤,默認標籤是打在最新提交的commit上

git tag tagName commit_id 在commit_id上打tag,適用於忘記打tag的情況

git tag -a tagName -m "blablabla..." 打標籤指定標籤信息

git show tagName 查看tag的說明

git tag -d tagName 刪除本地標籤tagName

git push origin tagName 把標籤推送到遠程

git push origin --tags 推送所有標籤到遠程

git push origin :refs/tags/tagName 刪除遠程的標籤tagName

git tag --list 查看所有tag

git checkout -b tagBranch tagName 檢出tag代碼
修改提交message
git commit -m “the commit message"     提交已經被add進來的改動.

git commit --amend 增補提交. 會使用與當前提交節點相同的父節點進行一次新的提交,舊的提交將會被取消.

git commit -a 會先把所有已經track的文件的改動add進來,然後提交(有點像svn的一次提交,不用先暫存). 對於沒有track的文件,還是需要git add一下.
Git rebase

rebase 遠程分支

git fetch
可以git fetch [alias]取某一個遠程repo,也可以git fetch --all取到全部repo
 fetch將會取到所有你本地沒有的數據,所有取下來的分支可以被叫做remote branches,它們和本地分支一樣(可以看diff,log等,也可以merge到其他分支),但是Git不允許你checkout到它們. 
git rebase origin

處理conflicts

git add .

git rebase --continue

git push origin master
rebase 本地分支
 --rebase不會產生合併的提交,它會將本地的所有提交臨時保存爲補丁(patch),放在”.git/rebase”目錄中,然後將當前分支更新到最新的分支尖端,最後把保存的補丁應用到分支上.

git rebase branchName

處理conflicts

git add .

 git rebase --continue就會繼續打餘下的補丁.

git push origin master

( git rebase --abort將會終止rebase,當前分支將會回到rebase之前的狀態.)
多行註釋
git commit -m '

1.one

2.two

'
查看本地分支跟蹤的遠程分支
git branch -vv
切換跟蹤的分支
git remote rm origin

git remote add origin [email protected]:lejiangkai/MXD.git

git push -u origin feature5.5.4
stash用法
存檔
git stash

查看存檔列表
git stash list

恢復存檔
git stash apply 存檔id

刪除存檔
git stash drop 存檔id

上面的恢復和刪除可以用下面的命令合併操作
git stash pop 存檔id
合併某個分支的單個文件
git checkout targetbranch

git checkout needMergeBranch -- needMergeFileName

如: 分支test上有一個文件A,你在test1分支上, 此時如果想用test分支上的A文件替換test1分支上的文件的話,可以使用

git checkout test1

然後

git checkout test -- A
遠程倉庫下載項目
git clone 項目地址
git remote
list, add and delete remote repository aliases.
 因爲不需要每次都用完整的url,所以Git爲每一個remote repo的url都建立一個別名,然後用git remote來管理這個list.
 git remote: 列出remote aliases.
 如果你clone一個project,Git會自動將原來的url添加進來,別名就叫做:origin.
 git remote -v:可以看見每一個別名對應的實際url.
 git remote add [alias] [url]: 添加一個新的remote repo.
 git remote rm [alias]: 刪除一個存在的remote alias.
 git remote rename [old-alias] [new-alias]: 重命名.
 git remote set-url [alias] [url]:更新url. 可以加上—push和fetch參數,爲同一個別名set不同的存取地址.
git clean
git clean是從工作目錄中移除沒有track的文件.
通常的參數是git clean -df:
-d表示同時移除目錄,-f表示force,因爲在git的配置文件中, clean.requireForce=true,如果不加-f,clean將會拒絕執行.
git revert
 反轉撤銷提交.只要把出錯的提交(commit)的名字(reference)作爲參數傳給命令就可以了.
 git revert HEAD: 撤銷最近的一個提交.
 git revert會創建一個反向的新提交,可以通過參數-n來告訴Git先不要提交.
git rm
git rm file: 從staging區移除文件,同時也移除出工作目錄.
git rm --cached: 從staging區移除文件,但留在工作目錄中.
git rm --cached從功能上等同於git reset HEAD,清除了緩存區,但不動工作目錄樹.
git remote rm origin 刪除遠程文件
git reset
 undo changes and commits.
 這裏的HEAD關鍵字指的是當前分支最末梢最新的一個提交.也就是版本庫中該分支上的最新版本.
 git reset HEAD: unstage files from index and reset pointer to HEAD
 這個命令用來把不小心add進去的文件從staged狀態取出來,可以單獨針對某一個文件操作: git reset HEAD - - filename, 這個- - 也可以不加.
 git reset --soft
 move HEAD to specific commit reference, index and staging are untouched.
 git reset --hard
 unstage files AND undo any changes in the working directory since last commit.
 使用git reset —hard HEAD進行reset,即上次提交之後,所有staged的改動和工作目錄的改動都會消失,還原到上次提交的狀態.
 這裏的HEAD可以被寫成任何一次提交的SHA-1.
 不帶soft和hard參數的git reset,實際上帶的是默認參數mixed.

 sum:
 git reset --mixed id,是將git的HEAD變了(也就是提交記錄變了),但文件並沒有改變,(也就是working tree並沒有改變). 取消了commit和add的內容.
 git reset --soft id. 實際上,是git reset –mixed id 後,又做了一次git add.即取消了commit的內容.
 git reset --hard id.是將git的HEAD變了,文件也變了.
 按改動範圍排序如下:
 soft (commit) < mixed (commit + add) < hard (commit + add + local working)
git commit
提交已經被add進來的改動.
 git commit -m “the commit message"
 git commit -a 會先把所有已經track的文件的改動add進來,然後提交(有點像svn的一次提交,不用先暫存). 對於沒有track的文件,還是需要git add一下.
 git commit --amend 增補提交. 會使用與當前提交節點相同的父節點進行一次新的提交,舊的提交將會被取消.
git diff
 不加參數的git diff:
 show diff of unstaged changes.
 此命令比較的是工作目錄中當前文件和暫存區域快照之間的差異,也就是修改之後還沒有暫存起來的變化內容.

 若要看已經暫存起來的文件和上次提交時的快照之間的差異,可以用:
 git diff --cached 命令.
 show diff of staged changes.
 (Git 1.6.1 及更高版本還允許使用 git diff --staged,效果是相同的).

 git diff HEAD
 show diff of all staged or unstated changes.
 也即比較woking directory和上次提交之間所有的改動.

 如果想看自從某個版本之後都改動了什麼,可以用:
 git diff [version tag]
 跟log命令一樣,diff也可以加上--stat參數來簡化輸出.

 git diff [branchA] [branchB]可以用來比較兩個分支.
 它實際上會返回一個由A到B的patch,不是我們想要的結果.
 一般我們想要的結果是兩個分支分開以後各自的改動都是什麼,是由命令:
 git diff [branchA]…[branchB]給出的.
 實際上它是:git diff $(git merge-base [branchA] [branchB]) [branchB]的結果.
git log
 show commit history of a branch.
 git log --oneline --number: 每條log只顯示一行,顯示number條.
 git log --oneline --graph:可以圖形化地表示出分支合併歷史.
 git log branchname可以顯示特定分支的log.
 git log --oneline branch1 ^branch2,可以查看在分支1,卻不在分支2中的提交.^表示排除這個分支(Window下可能要給^branch2加上引號).
 git log --decorate會顯示出tag信息.
 git log --author=[author name] 可以指定作者的提交歷史.
 git log --since --before --until --after 根據提交時間篩選log.
 --no-merges可以將merge的commits排除在外.
 git log --grep 根據commit信息過濾log: git log --grep=keywords
 默認情況下, git log --grep --author是OR的關係,即滿足一條即被返回,如果你想讓它們是AND的關係,可以加上--all-match的option.
 git log -S: filter by introduced diff.
 比如: git log -SmethodName (注意S和後面的詞之間沒有等號分隔).
 git log -p: show patch introduced at each commit.
 每一個提交都是一個快照(snapshot),Git會把每次提交的diff計算出來,作爲一個patch顯示給你看.
 另一種方法是git show [SHA].
 git log --stat: show diffstat of changes introduced at each commit.
 同樣是用來看改動的相對信息的,--stat比-p的輸出更簡單一些.
tag操作
$ git tag —— 查看所有的標籤
$ git fetch origin tag <tagname> —— 獲取遠程tag
$ git tag tagName —— 創建輕量級標籤
$ git tag -a tagName -m "annotate" —— 創建帶註釋的標籤
$ git checkout tagName —— 切換到某一個標籤
$ git tag -d tagName —— 刪除本地某一個標籤
$ git push --tags —— 將本地所有tag提交到遠程
$ git push origin 標籤名—— 提交單個tag
$ git push origin :refs/tags/標籤名   --------刪除遠程標籤
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章