參考鏈接
配置全局用戶
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
【注意】git config命令的--global參數(shù)君珠,用了這個參數(shù)倍靡,表示你這臺機器上所有的Git倉庫都會使用這個配置,當(dāng)然也可以對某個倉庫指定不同的用戶名和Email地址桅咆。
創(chuàng)建本地版本庫
版本庫又名倉庫,可以理解成是一個目錄,這個目錄中的所有文件都被git管理起來窑多。
- 創(chuàng)建空目錄
λ mkdir dxf_test_git
λ cd dxf_test_git
λ pwd
>> C:\Users\IdeaProjects\dxf_test_git
- 將目錄變成Git可以管理的倉庫
λ git init
>> Initialized empty Git repository in C:\Users\IdeaProjects\dxf_test_git/.git/
- 將改動的文件添加到倉庫
在dxf_test_git目錄下新建一個test.txt文件,并添加兩行內(nèi)容洼滚,然后將改動添加至倉庫埂息。
# git add testfile 添加改動的文件,git add . 添加所有改動的文件
# git commit -m “……” 提交改動信息,引號中為改動提示千康,便于查找
λ git add test.txt
λ git commit -m "wrote a readme file"
>> 1 file changed, 2 insertions(+)
create mode 100644 test.txt
# 表示一個文件被改動享幽,添加了兩行內(nèi)容。
- 查看倉庫改動狀態(tài)
λ 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: test.txt
no changes added to commit (use "git add" and/or "git commit -a")
git status命令可以讓我們時刻掌握倉庫當(dāng)前的狀態(tài)吧秕,上面的命令輸出告訴我們琉闪,test.txt被修改過了迹炼,但還沒有準備提交的修改砸彬。用git diff這個命令看看,可以看到具體修改了什么內(nèi)容斯入。
λ git diff
>> diff --git a/test.txt b/test.txt
index d8036c1..d55a7b6 100644
--- a/test.txt
+++ b/test.txt
@@ -1,2 +1,4 @@
Git is a version control system.
+Git is free software.
+Git is a distributed version control system.
Git is free software.
\ No newline at end of file
- 查看提交記錄
λ git log
>> commit 9857b0eb859740cb7846a5b9f8bb4ef2fd849b76 (HEAD -> master)
Author: MyName <MyName@qq.com>
Date: Mon Aug 19 16:42:38 2019 +0800
This is a test file
commit 05e0a6a03c1c29ccdbf5393483a5e21a65a359d8
Author: MyName <MyName@qq.com>
Date: Mon Aug 19 14:54:41 2019 +0800
write a test file
git log命令顯示從最近到最遠的提交日志砂碉,如果嫌信息太多,可以試試加上--pretty=oneline參數(shù):
λ git log --pretty=oneline
>> 9857b0eb859740cb7846a5b9f8bb4ef2fd849b76 (HEAD -> master) This is a test file
05e0a6a03c1c29ccdbf5393483a5e21a65a359d8 write a test file
"9857b0……"是Git的commit id刻两,用十六進制表示增蹭。
- 版本回退
在Git中,用HEAD表示當(dāng)前版本磅摹,也就是最新的提交"9857b0……"(注意我的提交ID和你的肯定不一樣)滋迈,上一個版本就是HEAD,上上一個版本就是HEAD^户誓,HEAD~100表示前第100個版本饼灿。
λ git reset --hard HEAD^
>> More?
More?
fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.Use '--' to separate paths from revisions, like this:'git <command> [<revision>...] -- [<file>...]'
# 回退失敗:由于windows中^是特殊字符帝美,因此要加引號
λ git reset --hard HEAD‘^’
>> HEAD is now at 05e0a6a write a test file
當(dāng)你回退到了某個版本碍彭,又后悔了,想恢復(fù)到新版本卻找不到新版本的commit id時悼潭,可以用git reflog查看每一次命令庇忌。
λ git reflog
>> 05e0a6a (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
9857b0e HEAD@{1}: commit: This is a test file
05e0a6a (HEAD -> master) HEAD@{2}: commit (initial): write a test file
由此可知,新版本的id是9857b0e舰褪,可以用λ git reset --hard 9857b0e命令返回新的版本皆疹。
- 撤銷修改
情況一:修改了文件,但是還沒有add占拍,可以用git checkout -- file命令清除工作區(qū)的修改略就。注意,--很重要刷喜,沒有--残制,就變成了“切換到另一個分支”的命令。
λ 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: test.txt
no changes added to commit (use "git add" and/or "git commit -a")
λ git checkout -- test.txt
λ git status
>> On branch master
nothing to commit, working tree clean
情況二:修改了文件掖疮,并且已經(jīng)add初茶,但是還沒有commit。可以用git reset HEAD file命令把暫存區(qū)的修改撤銷掉(unstage)恼布,重新放回工作區(qū)螺戳,再用git checkout -- file命令清除工作區(qū)。
λ git reset HEAD test.txt
>> Unstaged changes after reset:
M test.txt
λ git checkout -- test.txt
- 刪除文件
情況一:誤刪
λ git checkout -- delete.txt
情況二:確實要刪掉
λ git rm delete.txt
λ git commit -m "remove the delete.txt"
遠程倉庫
- 關(guān)聯(lián)遠程倉庫
λ git remote add origin ssh://git@xxxxxxxx/LearnGit.git
遠程庫的名字就是origin折汞,這是Git默認的叫法倔幼,也可以改成別的,但是origin這個名字一看就知道是遠程庫爽待。
- 推送本地倉庫內(nèi)容
λ git push -u origin master
第一次推送master分支時损同,加上了-u參數(shù),Git不但會把本地的分支內(nèi)容推送的遠程新的master分支鸟款,還會把本地的master分支和遠程的master分支關(guān)聯(lián)起來膏燃,在以后的推送或者拉取時就可以簡化命令。
- 克隆遠程庫內(nèi)容至本地
λ git clone ssh://git@xxxxxxxx/LearnGit.git
- 創(chuàng)建分支
λ git checkout -b dev
-b表示創(chuàng)建并切換分支何什,相當(dāng)于以下兩條命令:
λ git branch dev
λ git checkout dev
用git branch命令查看當(dāng)前分支组哩。git branch命令會列出所有分支,當(dāng)前分支前面會標一個*號处渣。
λ git branch
* dev
master
然后伶贰,我們就可以在dev分支上正常提交,比如對test.txt做個修改罐栈。此時黍衙,如果再將分支切換回master,會發(fā)現(xiàn)test.txt中沒有新添加的內(nèi)容悠瞬。
- 合并指定分支到當(dāng)前
λ git merge dev
>> Updating 1dbbb68..65677ed
Fast-forward
test.txt | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
- 刪除分支
$ git branch -d dev
- 儲藏分支
在dev分區(qū)下工作们豌,工作只進行到一半,還沒法提交浅妆,但必須馬上解決一個bug望迎,可以利用stash功能把當(dāng)前工作現(xiàn)場“儲藏”起來,等以后恢復(fù)現(xiàn)場后繼續(xù)工作凌外,另外創(chuàng)建issue分支來修復(fù)bug辩尊。
# on branch dev
λ git stash
# 返回master分支,在master分支上創(chuàng)建新的issue分支用來解決bug康辑,合并master分支摄欲,并刪除issue分支
# 回到dev分支
λ git stash list
λ git stash apply
λ git stash drop
λ git stash pop
可以多次stash,恢復(fù)的時候疮薇,先用git stash list查看胸墙,然后用命令git stash apply stash@{0}恢復(fù)指定的stash。
同樣的bug按咒,要在dev上修復(fù)迟隅,我們只需要把fix bug 101這個提交所做的修改“復(fù)制”到dev分支。注意:我們只復(fù)制fix bug 101這個提交所做的修改,并不是把整個master分支merge過來智袭。Git專門提供了一個cherry-pick命令奔缠,讓我們能復(fù)制一個特定的提交到當(dāng)前分支。
λ git branch
* dev
maste
# 4c805e2是fix bug 101這個提交的id
λ git cherry-pick 4c805e2
[master 1d4b803] fix bug 101
1 file changed, 1 insertion(+), 1 deletion(-)
- 查看遠程庫信息
λ git remote -v
- 建立本地分支和遠程分支的關(guān)聯(lián)
λ git branch --set-upstream branch-name origin/branch-name