window 下安裝 git
- 可以從Git官網直接下載安裝程序,(網速慢的同學請移步國內鏡像),然后按默認選項安裝即可。
- 安裝完成后,在開始菜單里找到“Git”->“Git Bash”,蹦出一個類似命令行窗口的東西,就說明Git安裝成功!
- 安裝完成后,還需要最后一步設置,在命令行輸入:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
因為Git是分布式版本控制系統,所以,每個機器都必須自報家門:你的名字和Email地址。你也許會擔心,如果有人故意冒充別人怎么辦?這個不必擔心,首先我們相信大家都是善良無知的群眾,其次,真的有冒充的也是有辦法可查的。
注意:git config命令的--global參數,用了這個參數,表示你這臺機器上所有的Git倉庫都會使用這個配置,當然也可以對某個倉庫指定不同的用戶名和Email地址。
版本庫
- 創建一個版本庫
- 創建一個叫做git空目錄
命令行cmd下md E:\git
- 創建空倉庫
git init
這時當前目錄下多了一個.git的目錄,這個目錄是Git來跟蹤管理版本庫的,沒事千萬不要手動修改這個目錄里面的文件,不然改亂了,就把Git倉庫給破壞了。 - 把文件添加到版本庫
- 編寫一個readme.txt文件放到當前目錄下
This is my first git.
- 用命令
git add <file>
告訴Git,把文件添加到倉庫,可以多次add不同的文件
git add readme.txt
- 用命令
git commit -m <message>
告訴Git,把文件提交到倉庫,commit一次可以提交很多文件
-m 后面輸入的是本次提交的說明,方便找到改動記錄
git commit -m "wrote a readme file"
1 file changed:1個文件被改動(我們新添加的readme.txt文件);1 insertions:插入了1行內容(readme.txt有1行內容)。
- 創建一個叫做git空目錄
修改文件 git status
- 使用
git status
查看倉庫當前的狀態
表明當前沒有需要提交的修改,而且,工作目錄是干凈 - 修改readme.txt為:
使用This is my changed git.
git status
查看倉庫當前的狀態
表明文件readme.txt被修改了 - 查看具體修改了什么內容:
git diff readme.txt
第一行修改了 - 提交到倉庫:add+commit
git add readme.txt
查看狀態:
表明將要被提交的修改包括readme.txt
git commit -m "changed"
-
提交后,我們再用git status命令看看倉庫的當前狀態:
表明當前沒有需要提交的修改,而且,工作目錄是干凈(working tree clean)的。
版本回退
-
git log
命令顯示從最近到最遠的提交日志
- 如果嫌輸出信息太多,看得眼花繚亂的,可以試試加上--pretty=oneline參數:
git log --pretty=oneline
你看到的一大串類似2cb44207的是commit id(版本號),是一個SHA1計算出來的一個非常大的數字,用十六進制表示,而且你看到的commit id和我的肯定不一樣,以你自己的為準。為什么commit id需要用這么一大串數字表示呢?因為Git是分布式的版本控制系統,后面我們還要研究多人在同一個版本庫里工作,如果大家都用1,2,3……作為版本號,那肯定就沖突了。 - 在Git中,用HEAD表示當前版本,也就是最新的提交2cb44207...(注意我的提交ID和你的肯定不一樣),上一個版本就是HEAD^,上上一個版本就是HEAD^^,當然往上100個版本寫100個^比較容易數不過來,所以寫成HEAD~100。
-
git reset --hard <commit id>|HEAD^|HEAD^^
回退到上一個版本wrote a readme file -
git reflog
用來記錄你的每一次命令:但不知道id的時候可以查看
工作區和緩存區
工作區:一個文件夾就是一個工作區
-
版本庫:.git
Git的版本庫里存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區,還有Git為我們自動創建的第一個分支master,以及指向master的一個指針叫HEAD。
需要提交(add)的文件修改通通放到暫存區,然后,一次性提交(commit)暫存區的所有修改。
-
git add
-
git commit
管理修改
- Git跟蹤并管理的是修改,而非文件。
- 修改:新增了一行,這就是一個修改,刪除了一行,也是一個修改,更改了某些字符,也是一個修改,刪了一些又加了一些,也是一個修改,甚至創建一個新文件,也算一個修改。
- commit 只會提交已add的修改,若文件修改后未add則不會提交該修改。
- Git管理的是修改,當你用git add命令后,在工作區的第一次修改被放入暫存區,準備提交,但是,在工作區的第二次修改并沒有放入暫存區,所以,git commit只負責把暫存區的修改提交了,也就是第一次的修改被提交了,第二次的修改不會被提交。
- 提交第二次修改呢:你可以繼續git add再git commit,也可以別著急提交第一次修改,先git add第二次修改,再git commit,就相當于把兩次修改合并后一塊提交了:
第一次修改 -> git add -> 第二次修改 -> git add -> git commit
撤銷修改
- 修改了工作區的文件,還沒有提交到緩存區,想直接丟棄工作區的修改,用
git checkout -- file
現在的readme.txt:
修改但沒有This is my first git.
git add
:This is a wrong changed.
使用git checkout -- readme.txt
現在的readme.txt:
This is my first git.
- 修改了文件并
git add
了:git reset HEAD <file>
-
git checkout -- <file>
現在的readme.txt:
修改并This is my first git.
git add
:This is a wrong changed.
現在的readme.txt:
This is my first git.
- 已經commit了,使用版本回退的方法
git reset --hard <commit id>|HEAD^|HEAD^^
刪除文件
-
git rm <file>
刪除文件- 還沒有
git add
使用git checkout HEAD <file>
- 已經
git add
使用git reset HEAD <file>
+git checkout HEAD <file>
- 還沒有
遠程倉庫
在GitHub上new一個Repository命名在learnGIT然后create
目前,在GitHub上的這個learnGIT倉庫還是空的,可以從這個倉庫克隆出新的倉庫,也可以把一個已有的本地倉庫與之關聯,然后,把本地倉庫的內容推送到GitHub倉庫。
git remote add origin https://github.com/<username>/firstGIT.git
添加后,遠程庫的名字就是origin,這是Git默認的叫法,也可以改成別的,但是origin這個名字一看就知道是遠程庫。-
把本地庫的所有內容推送到遠程庫上
git push -u origin master
用
git push
命令,實際上是把當前分支master推送到遠程。由于遠程庫是空的,我們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在以后的推送或者拉取時就可以簡化命令。從現在起,只要本地作了提交,就可以通過命令:
git push origin master
輸入用戶名、密碼后可以發現推送成功
從遠程庫克隆
git clone git@github.com:<username>/learnGIT.git