您的位置:首页 > 其它

git自学1: git使用基础篇

2018-08-02 15:38 148 查看

1. 如何创建一个git本地仓库?

# shell $> mkdir mygitdir
# shell $> cd mygitdir
# shell $> git init
Initialized empty Git repository in /Users/foreverich/git/mygitdir/.git/


此时会在
mygitdir
目录下创建一个
.git
的隐藏目录, 用于存储本地版本信息

2. 如何本地提交一个文件?

# shell $> echo 'git test' > readme.md
# shell $> git add readme.md

# shell $> git commit -m "add readme.me for test"
[master (root-commit) ca3c109] add readme.me for test
1 file changed, 1 insertion(+)
create mode 100644 readme.md
[master (root-commit) ca3c109] add readme.me for test
1 file changed, 1 insertion(+)
create mode 100644 readme.md

3. 查看git当前状态

# shell $> git status
On branch master
nothing to commit, working tree clean

# shell $> echo 'git new line' >> readme.md

# shell $> 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.md

no changes added to commit (use "git add" and/or "git commit -a")


可以看到我们修改
readme.md
文件后,
git status
的状态变更了,说有未提交的内容

4. 查看git的具体变更内容
git diff

# shell $> git diff
diff --git a/readme.md b/readme.md
index f6edd6e..6e1edee 100644
--- a/readme.md
+++ b/readme.md
@@ -1 +1,2 @@
git test
+git new line


特别注意: 此时是交互式的, 退出按
q
即可, 如果不想进入交互模式, 则添加如下选项:
--exit-code


# shell $> git diff --exit-code
diff --git a/readme.md b/readme.md
index f6edd6e..6e1edee 100644
--- a/readme.md
+++ b/readme.md
@@ -1 +1,2 @@
git test
+git new line

5. 再次提交修改的内容

# shell $> git add readme.md
# shell $> git commit -m "add new content to readme.md"
[master 5230322] add new content to readme.md
1 file changed, 1 insertion(+)
# shell $> git status
On branch master
nothing to commit, working tree clean


可以发现再次提交后,
git status
提示版本仓库目录是干净的

6. 查看提交历史

# shell $> git log
commit 52303226fadd453f35f82fe793f40746fb814511 (HEAD -> master)
Author: foreverich <xxxxxx@example.com>
Date:   Tue Jul 31 22:37:12 2018 +0800

add new content to readme.md

commit ca3c109e0f6d8738af7918b42cc4e6b0f0c7d5df
Author: foreverich <xxxxxx@example.com>
Date:   Tue Jul 31 22:19:15 2018 +0800

add readme.me for test


可以看到我们提交了2次, 以及commit的hash值, 作者, 提交时间, 2次的commit内容

7. 对比git两次提交的差异

使用命令
git diff hash1 hash2
对比两次提交之间的差异

# shell $> git diff ca3c109e0f6d873 52303226fadd453f3
diff --git a/readme.md b/readme.md
index f6edd6e..6e1edee 100644
--- a/readme.md
+++ b/readme.md
@@ -1 +1,2 @@
git test
+git new line


git diff
只检查工作区和暂存区或本地仓库之间的差异

如果要比较暂存区与本地仓库之间的差异, 则需要使用
git diff --cached
指令

8. 在本地回退到上个版本

# shell $> git reset --hard HEAD^
HEAD is now at ca3c109 add readme.me for test

# shell $> cat readme.md
git test


HEAD
表示当前版本,
HEAD^
表示上个版本,
HEAD^^
表示上2个版本,
HEAD~100
表示倒数第100个版本

也可以使用hash值来表示要退到的版本, 甚至刚刚消失的版本, 我们还可以撤退回来.

# shell $> git reset --hard 52303226fadd453f3
HEAD is now at 5230322 add new content to readme.md

# shell $> cat readme.md
git test
git new line

9. 如果你找不到git版本的hash,可以通过
git reflog
查找

# shell $> git reflog
5230322 (HEAD -> master) HEAD@{0}: reset: moving to 52303226fadd453f3
ca3c109 HEAD@{1}: reset: moving to HEAD^
5230322 (HEAD -> master) HEAD@{2}: commit: add new content to readme.md
ca3c109 HEAD@{3}: commit (initial): add readme.me for test

10. 修改文件后, 还没有
git add
到暂存区撤销方法

# shell $> sed -i 's/new/second/g' readme.md
# shell $> echo 'the third line' >> readme.md
# shell $> cat readme.md
git test
git second line
the third line

# shell $> 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.md

no changes added to commit (use "git add" and/or "git commit -a")

## 撤销文件的修改
# shell $> git checkout -- readme.md

## 再次查看文件内容, 会发现刚刚的修改已经撤销了
# shell $> cat readme.md
git test
git new line


git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令

11. 修改文件后, 已经
git add
到暂存区的撤销方法

# shell $> echo 'git add readme line' >> readme.md
# shell $> git add readme.md

# shell $> git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

modified:   readme.md

## 上面已经提示我们可以通过 git reset HEAD <file> 撤销unstage状态
# shell $> git reset HEAD readme.md
Unstaged changes after reset:
M	readme.md

## 此时表示从暂存区取消 git add 操作, 但是我们的修改还是存在的.
# shell $> cat readme.me
git test
git new line
git add readme line

## 要想把这个修改撤销掉, 那就只要参考前面的 git checkout -- readme.md 操作
# shell $> git checkout -- readme.md

## 再次查看文件内容, 会发现刚刚的修改已经撤销了
# shell $> cat readme.md
git test
git new line

## 上面的命令也可以合并为一个命令来执行,不需要先 `git reset` 再 `git checkout`
# shell $> git reset --hard

## 可以一步到位地把你的修改完全恢复到未修改的状态

12. 修改文件后, 已经
git add
并且
git commit
, 但是还没有
git push
推送到远程, 怎么撤销

# shell $> git reset --hard origin/master


这里
origin/master
表示回退到远程的master分支状态

13. 修改文件后, 已推送到远程, 怎么撤销

假如你既
git add
了,又
git commit
了,并且还
git push
了,此时你的代码已经进入远程仓库。如果想恢复的话,你只需要先恢复本地仓库,再强制push到远程仓库就可以了. 因为你的本地仓库和远程仓库是等价的.

# shell $> git reset --hard HEAD^
# shell $> git push -f

14. 删除版本库里的一个文件

首先, 先在版本库里新增一个文件

# shell $> echo "new file" > new.txt

# shell $> git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)

new.txt

nothing added to commit but untracked files present (use "git add" to track)

# shell $> git add new.txt

# shell $> git commit -m "add new file"
[master 0bd592b] add new file
1 file changed, 1 insertion(+)
create mode 100644 new.txt


然后, 我们尝试删除

# shell $> rm new.txt

# shell $> git status
On branch master
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

deleted:    new.txt

no changes added to commit (use "git add" and/or "git commit -a")


此时, 提示我们文件被删除了, 但是版本库里还有这个文件, 要从版本库里删除, 应该使用如下命令

# shell $> git rm new.txt
rm 'new.txt'

# shell $> git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

deleted:    new.txt

# shell $> git commit -m "delete some file"
[master dd13a7a] delete some file
1 file changed, 1 deletion(-)
delete mode 100644 new.txt
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Git