Git 常用命令速查
從服務器上將代碼給拉下來
git clone https://github.com/zhdxmw/wy-music
Git 幾個專用名詞的譯名如下。
Workspace:工作區 Index / Stage:暫存區 Repository:倉庫區(或本地倉庫) Remote:遠程倉庫
遠程倉庫相關命令
1 檢出倉庫:$ git clone git://github.com/jquery/jquery.git 2 3 查看遠程倉庫:$ git remote -v 4 5 添加遠程倉庫:$ git remote add [name] [url] 6 7 刪除遠程倉庫:$ git remote rm [name] 8 9 修改遠程倉庫:$ git remote set-url --push [name] [newUrl] 10 11 拉取遠程倉庫:$ git pull [remoteName] [localBranchName] 12 13 推送遠程倉庫:$ git push [remoteName] [localBranchName]
注: git commit -m "用戶權限管理" --no-verify
如果想把本地的某個分支test提交到遠程倉庫,並作為遠程倉庫的master分支,或者作為另外一個名叫test的分支,如下:
git push origin test:master // 提交 本地test 分支作為遠程的master分支 git push origin test:test // 提交 本地test 分支作為遠程的test分支
- 分支(branch)操作相關命令
1 * git branch --set-upstream dev origin/next 2 * // 手動建立追蹤關系。dev分支追蹤origin/next分支 3 * git branch 列出所有本地分支 4 * git branch -r 列出所有遠程分支 5 * git branch -a 列出所有本地分支和遠程分支 6 * git branch [branch-name] 新建一個分支,但依然停留在當前分支 7 * git checkout -b [branch-name] 新建一個分支,並切換到該分支 8 * git branch --track [branch][remote-branch]
新建一個分支,與指定的遠程分支建立追蹤關系
1 * git checkout [branch-name] 切換到指定分支,並更新工作區 2 * git branch -d [branch-name] 刪除分支-d選項只能刪除已經參與了合並的分支,對於未有合並的分支是無法刪除的。 3 * git push origin --delete [branch-name] 刪除遠程分支
版本(tag)操作相關命令查看版本:$ git tag
1 創建版本:$ git tag [name] 2 3 刪除版本:$ git tag -d [name] 4 5 查看遠程版本:$ git tag -r 6 7 創建遠程版本(本地版本push到遠程):$ git push origin [name] 8 9 刪除遠程版本:$ git push origin :refs/tags/[name] 10 11 合並遠程倉庫的tag到本地:$ git pull origin --tags 12 13 上傳本地tag到遠程倉庫:$ git push origin --tags 14 15 創建帶注釋的tag:$ git tag -a [name] -m 'yourMessage'
合並分支
比如,如果要將開發中的分支(develop),合並到穩定分支(master)
1 首先切換的master分支:git checkout master。 2 然后執行合並操作:git merge develop。 3 如果有沖突,會提示你,調用git status查看沖突文件。 4 解決沖突,然后調用git add . 5 所有沖突解決后,git commit 提交更改。
拉取分支
獲取最新版本有兩種 拉取和 獲取 pull 和 fetch
1 git pull 相當於git fetch 和 git merge 2 3 git pull 從遠程拉取最新版本到本地自動合並 merge 4 git pull origin master 5 git fetch 從遠程獲取最新版本到本地不會自動合並 merge 6 git fetch origin master 7 git log -p master..origin/master 8 git merge origin/master
以上命令的含義:
首先從遠程的origin的master主分支下載最新的版本到origin/master分支上
然后比較本地的master分支和origin/master分支的差別
最后進行合並
實際使用中使用git fetch 更安全在merge之前可以看清楚 更新情況 再決定是否合並
當前的分支20171208,獲取20171214分支最新代碼,然后再推送到遠程遠程20171214
1 git fetch 2 git checkout 20171214 3 git merge 20171208 4 git push
推送分支
(1)本地分支與遠程分支可以不是追蹤關系
* 如果想把本地的某個分支test提交到遠程倉庫,並作為遠程倉庫的test分支,或者作為另外一個名叫test的分支,如下:
* 本地先開好分支然后推送到遠程
$ git checkout -b test //創建並切換到分支test $ git push origin test:test // 推送本地的test(冒號前面的)分支到
遠程origin的test (冒號后面的)分支(沒有會自動創建)
(2)本地分支與遠程分支是追蹤關系
* 如果想把本地的某個分支dev提交到遠程倉庫,並作為遠程倉庫的dev分支,或者作為另外一個名叫dev的分支,如下:
* 本地先開好分支然后推送到遠程 $ git checkout -b dev //創建並切換到分支dev 或者當前的分支就是dev $ git push origin dev eg.2 git push origin payght // 將本地dev 分支推送到遠程 payght 分支
分支操作
1 # 列出所有本地分支 2 $ git branch 3 4 # 列出所有遠程分支 5 $ git branch -r 6 7 # 列出所有本地分支和遠程分支 8 $ git branch -a 9 10 # 新建一個分支,但依然停留在當前分支 11 $ git branch [branch-name] 12 13 # 新建一個分支,並切換到該分支 14 $ git checkout -b [branch] 15 16 # 新建一個分支,指向指定commit 17 $ git branch [branch] [commit] 18 19 # 新建一個分支,與指定的遠程分支建立追蹤關系 20 $ git branch --track [branch] [remote-branch] 21 22 # 切換到指定分支,並更新工作區 23 $ git checkout [branch-name] 24 25 # 切換到上一個分支 26 $ git checkout - 27 28 # 建立追蹤關系,在現有分支與指定的遠程分支之間 29 $ git branch --set-upstream [branch] [remote-branch] 30 31 # 合並指定分支到當前分支 32 $ git merge [branch] 33 34 # 選擇一個commit,合並進當前分支 35 $ git cherry-pick [commit] 36 37 # 刪除分支 38 $ git branch -d [branch-name] 39 40 # 刪除遠程分支 41 $ git push origin --delete [branch-name] 42 $ git branch -dr [remote/branch]
查看信息
1 # 顯示有變更的文件 2 $ git status 3 4 # 顯示當前分支的版本歷史 5 $ git log 6 7 # 顯示commit歷史,以及每次commit發生變更的文件 8 $ git log --stat 9 10 # 搜索提交歷史,根據關鍵詞 11 $ git log -S [keyword] 12 13 # 顯示某個commit之后的所有變動,每個commit占據一行 14 $ git log [tag] HEAD --pretty=format:%s 15 16 # 顯示某個commit之后的所有變動,其"提交說明"必須符合搜索條件 17 $ git log [tag] HEAD --grep feature 18 19 # 顯示某個文件的版本歷史,包括文件改名 20 $ git log --follow [file] 21 $ git whatchanged [file] 22 23 # 顯示指定文件相關的每一次diff 24 $ git log -p [file] 25 26 # 顯示過去5次提交 27 $ git log -5 --pretty --oneline 28 29 # 顯示所有提交過的用戶,按提交次數排序 30 $ git shortlog -sn 31 32 # 顯示指定文件是什么人在什么時間修改過 33 $ git blame [file] 34 35 # 顯示暫存區和工作區的代碼差異 36 $ git diff 37 38 # 顯示暫存區和上一個commit的差異 39 $ git diff --cached [file] 40 41 # 顯示工作區與當前分支最新commit之間的差異 42 $ git diff HEAD 43 44 # 顯示兩次提交之間的差異 45 $ git diff [first-branch]...[second-branch] 46 47 # 顯示今天你寫了多少行代碼 48 $ git diff --shortstat "@{0 day ago}" 49 50 # 顯示某次提交的元數據和內容變化 51 $ git show [commit] 52 53 # 顯示某次提交發生變化的文件 54 $ git show --name-only [commit] 55 56 # 顯示某次提交時,某個文件的內容 57 $ git show [commit]:[filename] 58 59 # 顯示當前分支的最近幾次提交 60 $ git reflog 61 62 # 從本地master拉取代碼更新當前分支:branch 一般為master 63 $ git rebase [branch]
撤銷
1 # 恢復暫存區的指定文件到工作區 2 $ git checkout [file] 3 4 # 恢復某個commit的指定文件到暫存區和工作區 5 $ git checkout [commit] [file] 6 7 # 恢復暫存區的所有文件到工作區 8 $ git checkout . 9 10 # 重置暫存區的指定文件,與上一次commit保持一致,但工作區不變 11 $ git reset [file] 12 13 # 重置暫存區與工作區,與上一次commit保持一致 14 $ git reset --hard 15 16 # 重置當前分支的指針為指定commit,同時重置暫存區,但工作區不變 17 $ git reset [commit] 18 19 # 重置當前分支的HEAD為指定commit,同時重置暫存區和工作區,與指定commit一致 20 $ git reset --hard [commit] 21 22 # 重置當前HEAD為指定commit,但保持暫存區和工作區不變 23 $ git reset --keep [commit] 24 25 # 新建一個commit,用來撤銷指定commit 26 # 后者的所有變化都將被前者抵消,並且應用到當前分支 27 $ git revert [commit] 28 29 # 暫時將未提交的變化移除,稍后再移入 30 $ git stash 31 $ git stash pop