概述
Git
是一個分布式版本控制系統(tǒng)。
Git的功能:
- 跟蹤記錄項目文件的變更巴碗,能夠?qū)@些變更進行管理朴爬;
- 并行開發(fā),提高協(xié)同開發(fā)的效率橡淆;
分布式:
相比于集中式版本控制系統(tǒng)(例如SVN)召噩,Git沒有中央服務器,可以把完整的倉庫(repository)直接clone到本地逸爵,不需要聯(lián)網(wǎng)工作具滴;但通常也需要像github這樣的遠程倉庫實現(xiàn)在線協(xié)作。
安裝Git
下載合適的版本安裝即可师倔。
https://git-scm.com/downloads
配置
打開 Git Bash构韵,輸入:
$ git config --global user.name "NAME"
$ git config --global user.email "hahaha@awsl.com"
上述命令設置了本機的名稱和Email地址,因為使用了--global
參數(shù),本機所有的Git倉庫都會應用這些設置疲恢。
新建倉庫
首先凶朗,右鍵打開Git Bash,新建一個目錄显拳,比如:
mkdir repo
然后cd進這個目錄:
cd repo
在這里新建倉庫:
git init
git會在該目錄下添加.git目錄棚愤,它是隱藏的,可以用 ls -ah
看到杂数。
Windows下的操作相對簡單:
可以直接在要作為倉庫的文件夾下右鍵 Git Bash Here
宛畦。
至此,一個倉庫就創(chuàng)建完畢了耍休。
基本操作
使用Git的一個好幫手刃永,就是閱讀Git Bash給出的提示,簡單介紹以下這些概念能幫助我們理解這些提示的含義羊精。
init 創(chuàng)建出來的目錄斯够,比如上面的repo,稱為工作目錄(working directory)喧锦,在這里做的任何修改都不會被提交到Branch上读规。
相應于工作目錄,.git目錄是倉庫(repository)燃少,倉庫由兩部分組成束亏,一個是暫存區(qū)(stage),一個則是Git自動創(chuàng)建的master分支阵具。我們所做的修改只有提交到了分支上碍遍,才是有效的。
下面是基本命令:
把FILE添加到stage
git add FILE
把stage當前的所有內(nèi)容提交到分支上阳液,在TEXT中輸入對本次修改的描述怕敬。
git commit -m "TEXT"
獲得當前目錄的狀態(tài)(能給出很有幫助的提示)
git status
下面舉幾個栗子:
- 比如我對工作目錄下的readme.txt做了點修改,并沒有用add命令把文件添加到stage帘皿。
$ git status
On branch master // 在master分支下
Changes not staged for commit: // 這次更改還沒有放進stage (沒有被staged)
(use "git add <file>..." to update what will be committed) // 如果要提交更改东跪,那就先 add 后 commit
(use "git restore <file>..." to discard changes in working directory) // 如果要丟棄這些更改,就用這個restore命令來恢復鹰溜!
modified: readme.txt
no changes added to commit (use "git add" and/or "git commit -a")
如果遵照提示使用 git restore readme.txt
虽填,則會用上一次提交的readme.txt替換掉當前的,從而撤銷這次修改曹动。
注意:這種情況下使用git restore命令會直接改變工作目錄下的文件斋日。
- 如果我把這次修改add到了stage,再看看提示:
$ git status
On branch master
Changes to be committed: // 更改還沒有被commit墓陈!
(use "git restore --staged <file>..." to unstage) // 用 git restore 命令把這個更改從stage中扔出去桑驱,從而撤銷這次修改
modified: readme.txt
這種情況下竭恬,使用 restore --staged
僅僅是起到 unstage 作用而已,不會替換工作目錄的文件熬的。
我把這次修改用commit提交到了分支上痊硕,但是我又反悔了,想要撤銷:
首先查看所有之前提交的修改:
git log
進行一次回退:
git reset --hard HEAD^
至此押框,一切(包括工作區(qū)的文件)還原到了上一次commit的時候岔绸,仿佛時光倒流。-
這次的修改直接被我 push 到了遠程服務器橡伞,但是我又又又反悔了盒揉,想要撤銷。兑徘。刚盈。
(那可能就涼了)