git 日常使用
==查看隱藏文件 -ah==
- 初始化本地倉(cāng)庫(kù)
$ git init
- 添加文件到git
$ git add file //可以提交多個(gè)文件,空格隔開即可
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."
- 提交
$ git commit -m "wrote a readme file" //-m 是寫提交記錄的
$ git commit -m "add 2 file"
[master f738172] add 2 file
2 files changed, 2 insertions(+)
create mode 100644 readme1.txt
create mode 100644 readme2.txt
- 查看當(dāng)前倉(cāng)庫(kù)的狀態(tài)
$ git status
//修改了readme.txt文件,但是沒有提交,使用該命令會(huì)看到如下結(jié)果;
$ 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
no changes added to commit (use "git add" and/or "git commit -a")
....
上面的命令輸出告訴我們,readme.txt被修改過了,但還沒有準(zhǔn)備提交的修改试浙。
- 查看修改的內(nèi)容
$ git diff
...
//輸入該命令可以看到如下內(nèi)容
diff --git a/readme.txt b/readme.txt
index 3226a48..6965b13 100644
--- a/readme.txt
+++ b/readme.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.
- 查看提交記錄
命令顯示從最近到最遠(yuǎn)的提交日志,如果嫌輸出信息太多扎附,看得眼花繚亂的蹦骑,可以試試加上--pretty=oneline參數(shù):
如果查看指定數(shù)量的提交記錄 git log -n 1 //看最新的一條
$ git log
...
$ git log
commit 255fc8d7c00a6ff2868cf9f34f5a9256dfc95b34 (HEAD -> master)
Author: sunjianyun <sjy_mail@163.com>
Date: Tue Jul 23 10:57:56 2019 +0800
修改
commit fcc9c4a26402a8e7cdfb8e8469e1e5ba8864c964
Author: sunjianyun <sjy_mail@163.com>
Date: Tue Jul 23 10:51:01 2019 +0800
修改readme.txt文件
commit f73817266d7f6155c4323dcadc3922cc3602a742
Author: sunjianyun <sjy_mail@163.com>
Date: Tue Jul 23 10:41:56 2019 +0800
add 2 file
commit b1f8f7ea5b0e825734cc6643337d7f16c2e7d28a
Author: sunjianyun <sjy_mail@163.com>
Date: Tue Jul 23 10:32:32 2019 +0800
wroit a readme file
- 回退到上一個(gè)版本
$ git reset --hard HEAD^
- 回退到指定版本
如果執(zhí)行 git reset --hard HEAD^ 后悔,想回退之前的版本,執(zhí)行如下命令
git reset --hard 255fc8d7c00a6ff2868cf9f34f5a9256dfc95b34
//后面一長(zhǎng)串這個(gè)值為 提交記錄id ,可以不用寫全,只需要寫開頭幾位就可以了
- 查看執(zhí)行的每一條命令
& git reflog
...
255fc8d (HEAD -> master) HEAD@{0}: reset: moving to 255fc8d7c00a6ff2868cf9f34f5a9256dfc95b34
b1f8f7e HEAD@{1}: reset: moving to HEAD^
f738172 HEAD@{2}: reset: moving to HEAD^
fcc9c4a HEAD@{3}: reset: moving to HEAD^
255fc8d (HEAD -> master) HEAD@{4}: commit: 修改
fcc9c4a HEAD@{5}: commit: 修改readme.txt文件
f738172 HEAD@{6}: commit: add 2 file
b1f8f7e HEAD@{7}: commit (initial): wroit a readme file
- 查看工作區(qū)和版本庫(kù)里面最新版本的區(qū)別
$ git diff HEAD -- readme.txt
...
$ git diff HEAD -- readme.txt
diff --git a/readme.txt b/readme.txt
index e2640eb..795ec9e 100644
--- a/readme.txt
+++ b/readme.txt
@@ -8,3 +8,5 @@ Git is free software.
jsdh
添加一行呢絨
+
+sjdhd
==文件修改完成之后一定要記得 先add ,不然 commit 的時(shí)候會(huì)發(fā)現(xiàn)之前修改的沒有提交==
- 撤銷修改
$ git checkout -- readme.txt
//命令git checkout -- readme.txt意思就是例隆,把readme.txt文件在工作區(qū)的修改全部撤銷,這里有兩種情況:
//一種是readme.txt自修改后還沒有被放到暫存區(qū),現(xiàn)在淹辞,撤銷修改就回到和版本庫(kù)一模一樣的狀態(tài)床未;
//一種是readme.txt已經(jīng)添加到暫存區(qū)后竭翠,又作了修改,現(xiàn)在薇搁,撤銷修改就回到添加到暫存區(qū)后的狀態(tài)斋扰。總之啃洋,就是讓這個(gè)文件回到最近一次git commit或git add時(shí)的狀態(tài)传货。
git checkout -- file命令中的--很重要,沒有--宏娄,就變成了“切換到另一個(gè)分支”的命令问裕,我們?cè)诤竺娴姆种Ч芾碇袝?huì)再次遇到git checkout命令。
- 刪除文件
$ git rm readme.txt
$ git commit -m "delete readme.txt file"
==注意:從來(lái)沒有被添加到版本庫(kù)就被刪除的文件孵坚,是無(wú)法恢復(fù)的==
- 將本地倉(cāng)庫(kù)推送到遠(yuǎn)端空倉(cāng)庫(kù)(github 為例)
$ git remote add origin https://github.com/sunjiandev/GitTest.git
$ git push -u origin master
...
Enumerating objects: 32, done.
Counting objects: 100% (32/32), done.
Delta compression using up to 8 threads
Compressing objects: 100% (27/27), done.
Writing objects: 100% (32/32), 2.83 KiB | 1.41 MiB/s, done.
Total 32 (delta 9), reused 0 (delta 0)
remote: Resolving deltas: 100% (9/9), done.
To https://github.com/sunjiandev/GitTest.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
- 推送本地修改到遠(yuǎn)端服務(wù)器
$ git push origin master
- 從遠(yuǎn)程倉(cāng)庫(kù)clone 項(xiàng)目到本地
$ git clone git@github.com:sunjiandev/TestGit.git
- 創(chuàng)建分支
$ git checkout -b dev
//git checkout命令加上-b參數(shù)表示創(chuàng)建并切換粮宛,相當(dāng)于以下兩條命令:
// $ git branch dev
// $ git checkout dev
- 查看當(dāng)前分支
$ git branch
- 切換分支
$ git checkout master
Switched to branch 'master'
- 合并分支
git merge命令用于合并指定分支到當(dāng)前分支
$ git merge dev
- 刪除分支
$ git beanch -d dev
- 查看分支的合并關(guān)系圖
$ git log --graph
==查看分支:git branch==
==創(chuàng)建分支:git branch <name>==
==切換分支:git checkout <name>==
==創(chuàng)建+切換分支:git checkout -b <name>==
==合并某分支到當(dāng)前分支:git merge <name>==
==刪除分支:git branch -d <name>==
//查看分支的合并情況
==$ git log --graph --pretty=oneline --abbrev-commit==
- 保存當(dāng)前工作的現(xiàn)場(chǎng),待以后恢復(fù)呼繼續(xù)工作
$ git stash
- 恢復(fù)工作區(qū)
$ git stash apply
//但是恢復(fù)后,stash內(nèi)容并不刪除卖宠,你需要用git stash drop來(lái)刪除
$ git stash pop
//恢復(fù)的同時(shí)把stash內(nèi)容也刪了
- 查看stash 列表
$ git stash list
==你可以多次stash窟勃,恢復(fù)的時(shí)候,先用git stash list查看逗堵,然后恢復(fù)指定的stash,用命令:==
$ git stash apply stash@{0}