Git是一個開源的分佈式版本控制系統,能夠有效、高速的處理從很小到很是大的項目版本管理。Git 是 Linus Torvalds 爲了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件。html
我的理解:linux
在linux上安裝gitgithub
github適合我的使用,這裏我只講述鏈接遠程倉庫的兩種方式。vim
第一種:HTTPS方式windows
第二種:SSH方式,對於初學者,不知道ssh在哪裏,個人在C:\Users\asus.ssh,找到id_rsa.pub,以記事本的方式打開復制,登陸到本身的github,點擊右上角的頭像,再點擊Settings,找到SSH and GPK keys 點擊 ,右上角有個New SSH key 的按鈕點擊,隨便填一個Title,再把你剛纔複製的東西粘貼到Key框裏,而後點擊Add SSH key,就能夠用SSH克隆項目了。 (若是找不到.ssh,在計算機裏搜索)緩存
git config --global user.name stefan
git config --global user.email 502681863@qq.com
複製代碼
這樣你提交的遠程分支就顯示你的信息了。bash
固然你也能夠找到git的配置文件.gitconfig,進行修改。個人在C:\Users\asus下面,若是找不到能夠搜索文件名.gitconfig。服務器
個人以記事本打開是這樣的:app
[user]
name = Stefan
email = 502681863@qq.com
signingkey = stefan0712
[credential]
helper = manager
[filter "lfs"]
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
[color]
ui = true
[alias]
st = status
cm = commit -m
ck = checkout
plo = pull origin
ps = push
a =add .
複製代碼
剛纔以命令設置的name和email都在這個文件裏。
步驟:
步驟:
git status
git add .
git commit -m "修改"
git push(這裏是直接能夠push的,由於把遠程master也克隆下來了)
複製代碼
多人協做和我的協做的最大區別是,多我的在一個分支下提交,這就避免不了有衝突。我的使用的時候應該是幾乎不會出現衝突。
多人協做步驟:
git checkout dev(切換到dev分支)
git status
git add .
git commit -m "修改"
git pull origin dev
git push
git checkout –b dev_xfy(建立並切換到dev_xfy分支下)
git checkout dev
git merge dev_xfy(合併dev_xfy到dev)
git pull origin dev
git push
複製代碼
當兩個分支在同一個文件的同一個位置作了修改時,兩者合併時會出現衝突,查看衝突,留下正確的修改,從新 git add b.txt git commit -m'衝突已解決'。
其實解決衝突也很簡單,當衝突出現時,git status 會告訴你哪些文件有衝突(顯示紅色的文件),在項目中找到相應的文件 看到相似的
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> dev_xfy
複製代碼
Git用<<<<<<<,=======,>>>>>>>標記出不一樣分支的內容,咱們把這些標記刪掉,留下正確的代碼就能夠了。
爲何要使用碼雲呢,由於碼雲是中文的,而且它更適合多人協做,一個組織的管理。
一樣的使用方法和github很相似,首先得註冊一個碼雲帳號。接下來就是配置SSH,和github過程基本同樣。
mkdir: XX (建立一個空目錄 XX指目錄名)
  pwd: 顯示當前目錄的路徑。
  git init 把當前的目錄變成能夠管理的git倉庫,生成隱藏.git文件。
  git add XX 把xx文件添加到暫存區去。
  git commit –m 「XX」 提交文件 –m 後面的是註釋。
  git status 查看倉庫狀態
  git diff XX 查看XX文件修改了那些內容
  git log 查看歷史記錄
  git reset --hard HEAD^ 或者 git reset --hard HEAD~ 回退到上一個版本
  (若是想回退到100個版本,使用git reset –hard HEAD~100 )
  cat XX 查看XX文件內容
  git reflog 查看歷史記錄的版本號id
  git checkout -- XX 把XX文件在工做區的修改所有撤銷。
  git rm XX 刪除XX文件
  git remote add origin https://github.com/StefanPython/demo.git 關聯一個遠程庫
  git push –u(第一次要用-u 之後不須要) origin master 把當前master分支推送到遠程庫
  git clone https://github.com/tugenhua0707/testgit 從遠程庫中克隆
  git checkout –b dev 建立dev分支 並切換到dev分支上
  git branch 查看當前全部的分支
  git checkout master 切換回master分支
git branch -m newname 修改當在分支
git branch -m oldname newname 修改其餘分支名字
  git merge dev 在當前的分支上合併dev分支
  git branch –d dev 刪除dev分支
  git branch name 建立分支
  git stash 把當前的工做隱藏起來 等之後恢復現場後繼續工做
  git stash list 查看全部被隱藏的文件列表
  git stash apply 恢復被隱藏的文件,可是內容不刪除
  git stash drop 刪除文件
  git stash pop 恢復文件的同時 也刪除文件
  git remote 查看遠程庫的信息
  git remote –v 查看遠程庫的詳細信息
  git push origin master Git會把master分支推送到遠程庫對應的遠程分支上
git branch --merged顯示已經所有合併到當前分支的分支
git branch --no-merged顯示沒有合併到當前分支的分支
若是要丟棄一個沒有被合併過的分支,能夠經過git branch -D <name>強行刪除。
複製代碼
查看日誌:
git log
有更好的格式 git log --pretty=oneline
查看全部操做日誌git reflog
版本回退:
git reset --hard head^ 回到上一個版本
git reset --hard 版本號 想回到的版本號
得到版本號的命令 git reflog
撤銷上一次的修改(未提交的而且是在緩存區的):
git checkout -- 文件名 在暫存區修改文件未提交,可用此命令撤銷當前未提交的修改,若是有多個文件修改須要撤銷 git checkout -- .
git reset --hard head 定位到當前提交狀態指針,當一個暫存區文件修改後未提交時等同於git checkout -- 文件名
注意:命令git checkout -- readme.txt 中的 -- 很重要,若是沒有 -- 的話,那麼命令變成建立分支了。
只要沒有commit均可以還原
鏈接遠程倉庫:
git remote add origin1 https://github.com/xfy007/gitsecond.git 添加測試用的遠端倉庫
git push -u origin1 master 每次咱們要提交代碼到服務器上時,都會使用到git push。git push命令會有兩個參數,遠端倉庫的名字,以及分支的名字
因爲遠程庫是空的,咱們第一次推送master分支時,加上了 –u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在之後的推送或者拉取時就能夠簡化命令。經後可直接git push
從遠程倉庫克隆:
git clone https://github.com/xfy007/gitsecond.git
總結建立與合併分支命令以下:
   查看分支:git branch
   建立分支:git branch name
   切換分支:git checkout name
   建立+切換分支:git checkout –b name
   合併某分支到當前分支:git merge name
   刪除分支:git branch –d name
保存工做現場:
當一個分支上的工做還沒完成,不能提交時,可是有一個bug須要我再主分支上新建一個分支去解決,因此用到
git stash 來保存工做現場
git status 查看沒有未提交的工做
要恢復工做現場 方法一:git stash pop (恢復並刪除stash內容)法二:git stash apply(恢復) , git stash drop(一個個刪除)
查看SSH公鑰的相關命令:
ssh-keygen 從新生成SSH公鑰
cd ~/.ssh 切換到.ssh目錄下
ll -a 查看.ssh下有哪些文件
cat ~/.ssh/id_rsa.pub 查看ssh key
複製代碼
注:命令無須強記,多使用,就會熟練。
每次輸那麼長的命令,感受效率很低,也很麻煩。能夠把這些長命令設置別名。
如: git status 設置成 git st
git add . 設置成git a
git commit -m 設置成 git cm
有命令修改別名可是一個一個修改好麻煩,你能夠再次找到.gitconfig文件,打開,找到[alias]標籤,以下
[alias]
st = status
cm = commit -m
ck = checkout
plo = pull origin
ps = push
a =add .
複製代碼
照這個樣子修改就好了。
能夠從git裏打開.gitconfig文件 命令以下
cd
cat .gitconfig
vim .gitconfig (進入vim編輯器)
在英文輸入法下按i,進入輸入模式,修改完成後,在英文輸入法下點ESC,在點shift+:底部就會出現一個:,輸入wq,就保存退出了
再經過cat .gitconfig查看是否修改
複製代碼
將一個文件夾經過git init 設置成一個git能夠管理的文件夾時,這個文件夾裏的內容就是工做區。
暫存區,叫stage 或者 index ,是用來暫時存放工做區中修改的內容; 能夠理解爲一箇中轉站
經過git init 會生成一個隱藏的文件.git,這個,git裏的東西就是版本庫
master是主分支,當咱們git init後,並不會馬上產生master, 而是咱們添加了一個文件,並git add .,git commit後, 這時咱們查看分支狀況, 即可以看到master分支了。(分支都存放在.git/head/refs目錄下)
HEAD是一個引用,引用的是當前的分支, 若是當前處於master分支,那麼HEAD就會指向master。
注:對三個區(工做區,暫存區、版本庫)有影響的幾個命令
git add 當咱們使用git add 指令時,就是將對應修改的文件添加到暫存區中
這時,暫存區中的目錄樹被更新。
git commit 咱們使用git commit指令,便會將暫存區中作出的修改提交到版本庫中
這時master指向的分支被更新。
git reset HEAD 當使用git reset HEAD 指令時,版本庫的內容會回退到暫存區。
git checkout --file 使用git checkout --file時,是將工做區指定修改的文件被暫存區的內容覆蓋(消除全部工做區進行的改動),這個動做很危險。
git checkout . 也是如此,該指令是將全部修改的文件被暫存區的內容覆蓋。
git rm --cached 使用git rm --cached file時,直接從暫存區進行文件的刪除,不會影響工做區的內容。
git checkout HEAD --file git checkout HEAD --flie 時,會將版本庫中的對應的文件內容直接替換工做區和暫存區中的該文件。
這個動做也是危險的,一樣git checkout HEAD . 是將全部的內容替換工做區和暫存區的文件。
複製代碼
查看三個分區的區別:
git diff 查看工做區和暫存區的區別
git diff --cached 查看暫存區和版本庫之間的區別
git diff HEAD 查看工做區和版本庫之間的區別
git status 查看當前的工做狀態
複製代碼
學到最後,其實仍是雲裏霧裏的,先不急,一個git也就這麼多,不必去深究,會用就行。只要用起來,在實踐中學習,會理解更深入。時間會慢慢解開你的疑惑。
有任何疑問請留言評論。