Git使用記錄


  • 建立版本庫
    什麼是版本庫呢?版本庫又名倉庫,英文名repository,你能夠簡單理解成一個目錄,這個目錄裏面的全部文件均可以被Git管理起來,每一個文件的修改、刪除,Git都能跟蹤,以便任什麼時候刻均可以追蹤歷史,或者在未來某個時刻能夠「還原」。

因此,建立一個版本庫很是簡單,首先,選擇一個合適的地方,建立一個空目錄:git

$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit

pwd命令用於顯示當前目錄。在個人Mac上,這個倉庫位於/Users/michael/learngit。github

若是你使用Windows系統,爲了不遇到各類莫名其妙的問題,請確保目錄名(包括父目錄)不包含中文。shell

第二步,經過git init命令把這個目錄變成Git能夠管理的倉庫:安全

$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/

瞬間Git就把倉庫建好了,並且告訴你是一個空的倉庫(empty Git repository),細心的讀者能夠發現當前目錄下多了一個.git的目錄,這個目錄是Git來跟蹤管理版本庫的,沒事千萬不要手動修改這個目錄裏面的文件,否則改亂了,就把Git倉庫給破壞了。學習

若是你沒有看到.git目錄,那是由於這個目錄默認是隱藏的,用ls -ah命令就能夠看見。fetch

也不必定必須在空目錄下建立Git倉庫,選擇一個已經有東西的目錄也是能夠的。不過,不建議你使用本身正在開發的公司項目來學習Git,不然形成的一切後果概不負責。ui

初始化一個Git倉庫,使用git init命令。

添加文件到Git倉庫,分兩步:

第一步,使用命令git add <file>,注意,可反覆屢次使用,添加多個文件;

第二步,使用命令git commit -m "message",完成。
要隨時掌握工做區的狀態,使用git status命令。

若是git status告訴你有文件被修改過,用git diff能夠查看修改內容。
HEAD指向的版本就是當前版本,所以,Git容許咱們在版本的歷史之間穿梭,使用命令git reset --hard commit_id。

穿梭前,用git log能夠查看提交歷史,以便肯定要回退到哪一個版本。

要重返將來,用git reflog查看命令歷史,以便肯定要回到將來的哪一個版本。
每次修改,若是不add到暫存區,那就不會加入到commit中。
git checkout -- filename 能夠丟棄工做區的修改
總之,就是讓這個文件回到最近一次git commit或git add時的狀態。

git checkout -- file命令中的--很重要,沒有--,就變成了「切換到另外一個分支」的命令,咱們在後面的分支管理中會再次遇到git checkout命令。
命令git rm用於刪除一個文件。若是一個文件已經被提交到版本庫,那麼你永遠不用擔憂誤刪,可是要當心,你只能恢復文件到最新版本,你會丟失最近一次提交後你修改的內容。
$ git rm test.txt
文件就從版本庫中被刪除了。
另外一種狀況是刪錯了,由於版本庫裏還有呢,因此能夠很輕鬆地把誤刪的文件恢復到最新版本:
$ git checkout -- test.txt

git checkout實際上是用版本庫裏的版本替換工做區的版本,不管工做區是修改仍是刪除,均可以「一鍵還原」。

添加遠程倉庫

要關聯一個遠程庫,使用命令git remote add origin git@github.com:songdanzju/repo-name.git;

關聯後,使用命令git push -u origin master第一次推送master分支的全部內容;

此後,每次本地提交後,只要有必要,就可使用命令git push origin master推送最新修改;

建立遠程庫,克隆到本地

$ git clone git@github.com:songdanzju/repo-name.git

create a new repository on the command line

echo "# Django-sample" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/songdanzju/Django-sample.git
git push -u origin master

push an existing repository from the command line

git remote add origin https://github.com/songdanzju/Django-sample.git
git push -u origin master

git push報錯error: failed to push some refs to 'git@github.com:this

$ git push -u origin master
To git@github.com:xxx/xxx.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'git@github.com:xxx/xxx.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

緣由:
GitHub遠程倉庫中的README.md文件不在本地倉庫中。
解決方案:code

$ git pull --rebase origin master
$ git push -u origin master

git關聯github遠程庫

#要關聯一個遠程庫,這裏repo-name是你在github中建立的repository的name,使用命令
git remote add origin git@github.com:songdanzju/repo-name.git

#關聯後,第一次推送master分支的全部內容,使用命令
git push -u origin master

#此後,每次本地提交後,只要有必要,推送最新修改,就可使用命令
git push origin master

從遠程庫克隆

首先,登錄GitHub,建立一個新的倉庫,名字叫gitskills:開發

咱們勾選Initialize this repository with a README,這樣GitHub會自動爲咱們建立一個README.md文件。建立完畢後,能夠看到README.md文件:

下一步是用命令git clone克隆一個本地庫:

$ git clone git@github.com:songdanzju/gitskills.git
Cloning into 'gitskills'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.

$ cd gitskills
$ ls
README.md

建立分支branch

首先,咱們建立dev分支,而後切換到dev分支:

$ git checkout -b dev
Switched to a new branch 'dev'

git checkout命令加上-b參數表示建立並切換,至關於如下兩條命令:

$ git branch dev
$ git checkout dev
Switched to branch 'dev'

而後,用git branch命令查看當前分支:

$ git branch
* dev
master

git branch命令會列出全部分支,當前分支前面會標一個*號。

而後,咱們就能夠在dev分支上正常提交,好比對readme.txt作個修改,加上一行:

Creating a new branch is quick.

而後提交:

$ git add readme.txt 
$ git commit -m "branch test"
[dev fec145a] branch test
1 file changed, 1 insertion(+)

如今,dev分支的工做完成,咱們就能夠切換回master分支:

$ git checkout master
Switched to branch 'master'

切換回master分支後,再查看一個readme.txt文件,剛纔添加的內容不見了!由於那個提交是在dev分支上,而master分支此刻的提交點並無變:

如今,咱們把dev分支的工做成果合併到master分支上:

$ git merge dev
Updating d17efd8..fec145a
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)

git merge命令用於合併指定分支到當前分支。合併後,再查看readme.txt的內容,就能夠看到,和dev分支的最新提交是徹底同樣的。

注意到上面的Fast-forward信息,Git告訴咱們,此次合併是「快進模式」,也就是直接把master指向dev的當前提交,因此合併速度很是快。

固然,也不是每次合併都能Fast-forward,咱們後面會講其餘方式的合併。

合併完成後,就能夠放心地刪除dev分支了:

$ git branch -d dev
Deleted branch dev (was fec145a).

刪除後,查看branch,就只剩下master分支了:

$ git branch
* master

由於建立、合併和刪除分支很是快,因此Git鼓勵你使用分支完成某個任務,合併後再刪掉分支,這和直接在master分支上工做效果是同樣的,但過程更安全。

小結

Git鼓勵大量使用分支:

查看分支:git branch

建立分支:git branch <name>

切換分支:git checkout <name>

建立+切換分支:git checkout -b <name>

合併某分支到當前分支:git merge <name>

刪除分支:git branch -d <name>
相關文章
相關標籤/搜索