1. 程式人生 > >git專案建立及日常管理簡單命令

git專案建立及日常管理簡單命令

Git是目前世界上最先的分散式版本控制系(沒有之一) 。

Linux上安裝Git
首先, 你可以git , 看看系有沒有安裝Git

$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git

像上面的命令, 有很多Linux會友好地告Git沒有安裝, 會告你如何安裝Git

msysgitWindows版的Git, 從http://msysgit.github.io/, 然後按默認選項安裝即可。

安裝完成後, 在開始菜

裡找到“Git”->“Git Bash”出一個似命令列視窗的西, 就Git安裝成功!
安裝完成後, 需要最後一步置, 在命令列入:

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]" 

注意 git config 命令的 --global 引數, 用了個引數, 表示你臺機器上所有的Git倉庫都會使用個配置, 當然也可以某個倉庫指定不同的用名和Email地址。

建版本

什麼是版本呢?版本又名
倉庫, 英文名repository, 你可以簡單理解成一個目
個目裡面的所有檔案都可以被Git管理起來, 每個檔案的修改、 除, Git
都能跟蹤, 以便任何刻都可以追蹤史, 或者在將來某個刻可以
所以,
建一個版本非常簡單, 首先, 選擇一個合適的地方, 建一個空目
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit 
第二步, 通 git init 命令把 個目 錄變 Git 可以管理的 倉庫
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/ 
Git 就把 倉庫 建好了, 而且告 你是一個空的 倉庫 empty Git repository ) , 心的 者可以 發現 當前目 下多了一個 .git 的目 個目 Git 來跟蹤管理版本 的, 沒事千萬不要手 修改 個目 裡面的檔案, 不然改亂了, 就把 Git 倉庫給 破壞了。

如果你沒有看到 .git , 那是因為這個目藏的, 用 ls -ah 命令就可以看

在我們編寫一個 readme.txt 檔案, 內容如下:

Git is a version control system.
Git is free software. 
第一步, 用命令 git add Git , 把檔案新增到 倉庫
$ git add readme.txt 
第二步, 用命令 git commit Git , 把檔案提交到 倉庫
$ git commit -m "wrote a readme file"
[master (root-commit) cb926e7] wrote a readme file
1 file changed, 2 insertions(+)
create mode 100644 readme.txt 
簡單 一下 git commit 命令, -m 後面 入的是本次提交的 明, 可以 入任意內容, 當然最好是有意 的, 這樣 你就能從 記錄 裡方便地找到改 動記錄 git commit 命令 行成功後會告 你, 1 個檔案被改 (我 新新增的 readme.txt 檔案) , 插入了 行內容( readme.txt 行內容) 。
什麼 Git 新增檔案需要 add commit 一共 步呢?因 commit 可以一次提交很多檔案, 所以你可以多次 add 不同的檔案, 比如:
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files." 
們繼續 修改 readme.txt 檔案, 改成如下內容:
Git is a distributed version control system.
Git is free software.
在, git status 命令看看 果:
$ git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory
# #
modified: readme.txt
# n
o changes added to commit (use "git add" and/or "git commit -a") 
Git readme.txt 被修改了, 但如果能看看具體修改了什麼內容, 自然是
很好的。 比如你休假
周從國外回來, 第一天上班 , 已 經記 不清上次怎麼修改的
readme.txt , 所以, 需要用 git diff 個命令看看:
$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
Git is free software. 
git diff 名思 就是 difference 示的格式正是 Unix 通用的 diff 格式, 可以從上面的命令 出看到, 我 在第一行添加了一個 “distributed” 單詞
知道了 readme.txt 作了什麼修改後, 再把它提交到 倉庫 就放心多了, 提交修改和提交新檔案是一 步, 第一步是 git add
$ git add readme.txt 
沒有任何 出。 在 行第二步 git commit 之前, 我 git
status
看看當前 倉庫 的狀
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
# #
modified: readme.txt
# 
git status , 將要被提交的修改包括 readme.txt , 下一步, 就可以放心
地提交了:
$ git commit -m "add distributed"
[master ea34578] add distributed
1 file changed, 1 insertion(+), 1 deletion(-) 
提交後, 我 再用 git status 命令看看 倉庫 的當前狀
$ git status
# On branch master
nothing to commit (working directory clean) 

Git知道當前版本是個版本, 在Git中, 用 HEAD 表示當前版本, 也就是最新的提交 3628164...882e1e0 (注意我的提交ID和你的肯定不一) , 上一個版本就是 HEAD^ , 上上一個版本就是 HEAD^^ , 當然往上100個版本寫100^ 容易數不來, 所以寫成 HEAD~100

小結

要隨掌握工作區的狀, 使用 git status 命令。

  • 如果 git status 你有檔案被修改
  • git diff 可以看修改內容。
  • HEAD 指向的版本就是當前版本, 因此, Git在版本的史之穿梭
  • 使用命令 git reset --hard commit_id
  • 穿梭前, 用穿梭前, 用 git log 可以看提交史, 以便確定要回退到個版本。
  • 要重返未來, 用 git reflog 看命令史, 以便確定要回到未來的個版本
  • 看看readme.txt的內容:
$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL. 

工作區和存區

工作區(Working Directory
就是你在電腦裡能看到的目, 比如我的 learngit 檔案就是一個工作區 :
版本 Repository
工作區有一個 藏目 .git 個不算工作區, 而是 Git 的版本 Git 的版本 裡存了很多 西, 其中最重要的就是稱 stage (或者叫 index ) 的 存區, Git 動創 建的第一個分支 master , 以及指向 master 的一個指 HEAD  
前面 了我 把檔案往 Git 版本 裡新增的 候, 是分 行的:
第一步是用
git add 把檔案新增 去, 實際 上就是把檔案修改新增到 存區;
第二步是用
git commit 提交更改, 實際 上就是把 存區的所有內容提交到當前分支。
們創 Git 版本 庫時 Git 動為 們創 建了唯一一個 master 分支, 所以,在, git commit 就是往 master 分支上提交更改。 你可以 簡單 理解 , 需要提交的檔案修改通通放到 存區, 然後, 一次性提交 存區的所有修改。

撤銷修改

git checkout -- file 可以 棄工作區的修改:
$ git checkout -- readme.txt
命令 git checkout -- readme.txt 意思就是, 把 readme.txt 檔案在工作區的
修改全部撤
裡有 種情況:
一種是 readme.txt 自修改後 沒有被放到 存區, 在, 撤 修改就回到和版本 一模一 的狀
一種是
readme.txt 新增到 存區後, 又作了修改, 在, 撤 修改就回到新增到 存區後的狀

commit 之前, 你 發現 問題 。 用 git status 看一下, 修
改只是新增到了
存區, 沒有提交:
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
# #
modified: readme.txt
#
Git , 用命令 git reset HEAD file 可以把 存區的修改撤
unstage ) , 重新放回工作區:
$ git reset HEAD readme.txt
Unstaged changes after reset:
M readme.txt 
git reset 命令既可以回退版本, 也可以把 存區的修改回退到工作區。 當我
HEAD , 表示最新的版本。


刪除檔案

用命令 git rm 掉, 並且 git commit
$ git rm test.txt
rm 'test.txt'
$ git commit -m "remove test.txt"
[master d17efd8] remove test.txt
1 file changed, 1 deletion(-)
delete mode 100644 test.txt
在, 檔案就從版本 中被 除了。


git log退出方法:英文狀態下按q。