一、介紹
提交代碼,代碼統一管理的工具,通過以下的操作,就可以輕鬆學習git。
二、原理
主要分爲workspace(工作區),index/stage(暫存區),Repository(本地倉庫),Remote(遠程倉庫)
注:git版本回退速度非常快,因爲git在內部有個指向當前版本的HEAD指針,當你版本回退,則Git僅僅是把HEAD指向append GPL,如下圖:
三、命令和操作
1.git:查看git是否安裝
mac 安裝git
1.先安裝homebrew
/usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
再安裝git
2.裝xcode(appstore下載),Xcode->preferences,Downloads->Command Line Tools,install
windows安裝git
下載git程序安裝,在開始菜單git bash命令就可以安裝成功
完成之後的配置:
$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"
用了這個參數,表示你這臺機器上所有的Git倉庫都會使用這個配置,當然也可以對某個倉庫指定不同的用戶名和Email地址
2.git init:初始化一個空倉庫,ls -ah就可以看到隱藏的 .git目錄
3.git add readme.txt:提交到暫存區(unix的哲學沒有消息就是好消息)
git add -A
4.git status:查看文件狀態
git add -A提交所有文件之後
5.git reset:默認是僅撤銷commit和add,工作區內容不變
git reset --soft:僅撤銷commit,暫存區和工作區內容bubain
git reset --hard commit-id:恢復到某個版本庫(暫存區、工作區均變化)
git reset –hard HEAD(在git中,用HEAD表示當前版本,上一個版本是HEAD,上上個版本是HEAD^^,如果100就是HEAD~100)
git reset –hard 提交號
git reset --hard origin/master:將遠程的代碼覆蓋本地的,丟棄暫存區和工作區的修改內容
6.git commit -m ‘note’
7.git push (-u) origin master:推到遠程倉庫
8.git pull
git fetch + git merge = git pull
??? Git fetch+ git rebase = Git pull --rebase
從目的來說,兩者沒差別,運行之後, 能獲得一樣的code base。但從版本管理角度,這兩者有各自的使用意義。對比來看,git merge多了一次提交–“合併提交”。git rebase則沒有。
git merge:
簡單來說,它把兩條不同分支歷史的所有提交合併成一條線,並在“末端”打個結,即生成一次合併提交。最後形成一條單一的提交線。
git rebase:
根據參數的不同,行爲有些差別。但總的來說,它相當於把分叉的兩條歷史提交線中的一條,每一次提交都撿選出來, 在另一條提交線上提交。最後也形成一條單一的提交線。
表示把本地當前分支裏的每個提交(commit)取消掉,並且把它們臨時 保存爲補丁(patch)(這些補丁放到".git/rebase"目錄中),然後把本地當前分支更新 爲最新的"origin"分支,最後把保存的這些補丁應用到本地當前分支上。
在rebase的過程中,也許會出現衝突(conflict). 在這種情況,Git會停止rebase並會讓你去解決 衝突;在解決完衝突後,用"git-add"命令去更新這些內容的索引(index), 然後,你無需執行 git-commit,只要執行:
$ git rebase --continue
這樣git會繼續應用(apply)餘下的補丁。
在任何時候,你可以用–abort參數來終止rebase的行動,並且"mywork" 分支會回到rebase開始前的狀態。
$ git rebase --abort
9.git diff readme.txt:查看比較,和本地庫進行比較
git diff -U
10.git log:查看提交歷史
11.git reflog:查看命令歷史,以便確定要回到未來哪個版本。
可以查看所有分支的所有操作記錄(包括(包括commit和reset的操作),包括已經被刪除的commit記錄,git log則不能察看已經刪除了的commit記錄
12.git stash:進入暫存區可以下代碼,對應一個git stash pop來恢復工作區代碼
rm rest.txt:刪除文件
git clone :從遠程倉庫克隆代碼
四、分支管理
head指針是指向當前分支,head,master各佔一個分支。
git checkout -b dev:創建本地分支,再提交
相當於git branch dev + git checkout dev
git branch -a:查看遠程和本地分支
git branch:查看當前分支
git branch -d dev:刪除分支
git push origin branchName:推送到遠程分支
git push origin :branchName:刪除遠程分支(origin後面有一個空格)
git checkout -b dev origin/dev:從遠程分支拉取本地分支
git merge branchName:本地合併分支,要想遠程合併,需要push
git branch --set-upstream-to origin/遠程分支名 本地分支名:本地和遠程分支之間建立聯繫
分支介紹:
五、遠程倉庫gitlab
- ssh的key:ssh-keygen –t rsa –C "[email protected]"
- 在github中setting配置ssh key(將生成的公鑰粘貼進去)
六、解決衝突
多人協作模式:
1.首先提交併推送到git push origin branchName推送自己的修改
2.如果推送失敗,則因爲遠程分支比本地新,需要用git pull試圖合併
3.如果合併有衝突,則解決衝突,並在本地提交
4.解決衝突之後重新進行push
git stash
git stash pop = git stash apply + git stash drop
七、打標籤
產品發佈後,打tag,方便將來拉分支修復bug。