前言
git相比svn做程式碼管理,感覺更有優勢,這兩者的區別體現在以下幾點:
- 1、首先,工作原理不一樣,svn是一種集中式的版本控制器,git是一種分散式的版本控制器。svn只有一箇中心倉庫,所有開發人員維護同一個伺服器上的程式碼。而git不同,每個開發人員的本地都是一個獨立的伺服器倉庫。
- 2、其次,分支管理不一樣,svn的分支是全域性的,你修改一個分支,所有人必須同步這個分支,才能進行其他操作。git可以本地建立多個分支,並且自由切換,不會影響到其他人。如果有需要就合併到master分支,然後push到遠端伺服器,讓大家同步;如果沒用也可以直接delete掉。
- 3、另外,安全機制不一樣,svn容易出現單點故障,如果伺服器當機,那麼所有人都無法工作了。git的話,即使伺服器掛了,每個研發的本地都相當於一個伺服器,還可以進行正常的開發工作。
使用git的基本流程:
一般來講 我們都是基於工作開發使用git的,首先在gitlab搭建自己伺服器,再由管理員去給你分配賬號許可權,如果你是提交程式碼到個人的githHub上,你得先自己去申請賬號。
1、配置使用者名稱和郵箱
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
複製程式碼
用了這個引數,表示你這臺機器上所有的Git倉庫都會使用這個配置,當然也可以對某個倉庫指定不同的使用者名稱和Email地址
2、生成公鑰並新增
ssh-keygen -t rsa -C ”yourEmail@example.com”
複製程式碼
最後顯示成:
在這裡可以看到id_rsa和id_rsa.pub已經生成,並且生成的路徑為/root/.ssh/。開啟id_rsa.pub檔案,並且複製全部內容。(路徑 C:\Users\admin.ssh)。
開啟GitLab賬戶,開啟SSH Keys: 新增git祕鑰
3、拉取程式碼
4、增加/刪除檔案
$ git add file1 file2 .... // 新增指定檔案到暫存區
$ git add [dir] // 新增指定目錄到暫存區,包括子目錄
$ git add . // 新增當前目錄下的所有檔案到暫存區
$ git rm file1 file2 ... // 刪除指定檔案,並將本次刪除放入暫存區
$ git rm --cached file //停止追蹤該檔案,但該檔案會保留在工作區
$ git mv [file-original] [file-renamed] // 改名檔案,並且將這個改名放入暫存區
複製程式碼
5、程式碼提交
$ git commit -m [message] // 提交暫存區到倉庫區
$ git commit [file1] [file2] ... -m [message] // 提交暫存區的指定檔案到倉庫區
$ git commit -a // 提交工作區自上次commit之後的變化,直接到倉庫區
$ git commit -v // 提交時顯示所有diff資訊
$ git commit --amend -m [message] // 使用一次新的commit,替代上一次提交, 如果程式碼沒有任何新變化,則用來改寫上一次commit的提交資訊
$ git commit --amend [file1] [file2] ...// 重做上一次commit,幷包括指定檔案的新變化
複製程式碼
6、 分支的建立與刪除
$ git flow feature start <branch-name> // git-flow 建立 feature 分支
$ git flow feature finish <branch-name> // git-flow 結束 feature 分支
$ git flow release start 1.1.5 // git flow 建立release 分支
$ git flow release finish 1.1.5 // git flow 結束release 分支
$ git branch // 列出所有本地分支
$ git branch -r // 列出所有遠端分支
$ git branch -a // 列出所有本地分支和遠端分支
$ git branch [branch-name] // 新建一個分支,但依然停留在當前分支
$ git checkout -b [branch] // 新建一個分支,並切換到該分支
$ git branch [branch] [commit] // 新建一個分支,指向指定commit
$ git checkout [branch-name] // 切換到指定分支,並更新工作區
$ git checkout - // 切換到上一個分支
$ git merge [branch] // 合併指定分支到當前分支
$ git cherry-pick [commit] // 選擇一個commit,合併進當前分支
$ git branch -d [branch-name] // 刪除分支
$ git push origin --delete [branch-name] // 刪除遠端分支
$ git branch -dr [remote/branch] // 刪除遠端分支
複製程式碼
7、檢視狀態和歷史記錄
$ git status // 顯示有變更的檔案
$ git log // 顯示當前分支的歷史版本
$ git log --stat // 顯示提交歷史以及每次提交發生變更的檔案
$ git shortlog -sn // 顯示所有提交過得使用者,並按提交次數排序
$ git diff // 顯示暫存區和工作區的差異
$ giy diff --cached [file] // 顯示暫存區和上一個提交的差異
$ git diff HEAD // 顯示工作區與當前分支最新提交的差異
$ git show [commit] // 顯示某次提交的源資料和內容變化
$ git reflog // 顯示當前分支的最近幾次提交
$ git blame [file] // 顯示指定檔案是什麼人在什麼時間修改過
複製程式碼
8、 遠端同步與撤銷暫存
$ git fetch [remote] // 下載遠端倉庫的所有變動
$ git remote -v // 顯示所有遠端倉庫
$ git remote show [remote] // 顯示某個遠端倉庫的資訊
$ git remote add [shortname] [url] // 增加一個新的遠端倉庫,並命名
$ git pull [remote] [branch] // 取回遠端倉庫的變化,並與本地分支合併
$ git push [remote] [branch] // 上傳本地指定分支到遠端倉庫
$ git push [remote] --force // 強行推送當前分支到遠端倉庫,即使有衝突
$ git push [remote] --all // 推送所有分支到遠端倉庫
$ $ git reset --hard //重置暫存區與工作區,與上一次commit保持一致
$ git checkout . // 恢復暫存區的所有檔案到工作區即撤銷暫存
$ git checkout [file] // 恢復暫存區的指定檔案到工作區
$ git checkout [commit] [file] // 恢復某個commit的指定檔案到暫存區和工作區
$ git stash // 暫時將未提交的變化移除,稍後再移入
複製程式碼
以上是所有git工作中常用的一些基本操作命令,在實際開發中,也許你會覺得這種用命令化的操作提交程式碼比較痛苦,下面將會為大家帶來一篇關於git視覺化管理工具的SourceTree使用,用圖形介面的操作替代這種黑視窗命令,讓你對程式碼的管理更加輕鬆自如。