学习笔记--git基础用法

在Windows上安装Git

在Windows上使用Git,可以从Git官网直接下载安装程序,然后按默认选项安装即可。

安装完成后,在开始右键菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!

安装完成后,还需要最后一步设置,在命令行输入:

//每个机器都必须自报家门:你的名字和Email地址

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

创建版本库(repository)
  1. 通过git init命令把这个目录变成Git可以管理的仓库
$ git init
Initialized empty Git repository in F:/gitLearn/.git/

如果你使用Windows系统,为了避免遇到各种莫名其妙的问题,请确保目录名(包括父目录)不包含中文。

瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository)

  1. 用命令git add告诉Git,把文件添加到仓库:
$ git add readme.txt
  1. 用命令git commit告诉Git,把文件提交到仓库:
$ git commit -m "提交readme.txt"
[master (root-commit) 70324e1] 提交readme.txt
 1 file changed, 1 insertion(+)
 create mode 100644 readme.txt

  1. 用命令 $ cat readme.txt 查看
$ cat readme.txt
第一个提交到git的文件。

  1. 继续添加 文件 a.txt,src/b.txt ,提交
//继续添加 
$ git add a.txt src/b.txt

//提交
$ git commit -m "提交a.txt,src/b.txt"
[master 5c480ec] 提交a.txt,src/b.txt
 2 files changed, 2 insertions(+)
 create mode 100644 a.txt
 create mode 100644 src/b.txt
 

解释:

-m后面输入的是本次提交的说明

为什么Git添加文件需要addcommit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件

  1. 修改 src/b.txt 文件 ;使用命令 git status 查看 ;

在src目录下回出现 2个文件 ,.bak文件是上一次的缓存文件

$ 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:   src/b.txt

Untracked files:
//没有版本记录的文件
  (use "git add <file>..." to include in what will be committed)
    //添加到将要提交的内容中
        src/b.txt.bak

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


  1. 需要使用命令git diff这个命令文件对比
$ git diff src/b.txt
diff --git a/src/b.txt b/src/b.txt
index 19acdd8..bf06994 100644
--- a/src/b.txt
+++ b/src/b.txt
@@ -1 +1,2 @@
-b.txt
\ No newline at end of file
+b.txt
+change++
\ No newline at end of file

添加并提交

$ git add src/b.txt
$ git commit -m"修改了src/b.txt 内容为change++"
[master e5f1f31] 修改了src/b.txt 内容为change++
 1 file changed, 2 insertions(+), 1 deletion(-)


小结
  • 初始化一个Git仓库,使用git init命令。
  • 添加文件到Git仓库,分两步:
    • 使用命令git add <file>,注意,可反复多次使用,添加多个文件;
    • 使用命令git commit -m <message>,完成。
  • 要随时掌握工作区的状态,使用git status命令
  • 如果git status告诉你有文件被修改过,用git diff可以查看修改内容

版本回退

在Git中,我们用git log 或者 git show命令查看:

一大串类似f718…的是commit id

(HEAD -> master) 表示当前的 版本

  1. 查看日志 git log ,相同功能的还有 git show
$ git log
commit e5f1f31e6674a8bfe92e6c9c915f4f6d5d728a1c (HEAD -> master)
Author: wuyihao <592132035@qq.com>
Date:   Tue Apr 21 21:12:23 2020 +0800

    修改了src/b.txt 内容为change++

commit 7c0b0f1bd72820a3a4f0c2fc9b4a8bbafffdd7fb
Author: wuyihao <592132035@qq.com>
Date:   Tue Apr 21 20:47:46 2020 +0800

    提交 a.txt src/b.txt

commit 70324e11216ad96e14c38b039c0713099fb87d16
Author: wuyihao <592132035@qq.com>
Date:   Tue Apr 21 17:07:03 2020 +0800

    提交readme.txt

如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:


$ git log --pretty=oneline
e5f1f31e6674a8bfe92e6c9c915f4f6d5d728a1c (HEAD -> master) 修改了src/b.txt 内容为change++
7c0b0f1bd72820a3a4f0c2fc9b4a8bbafffdd7fb 提交 a.txt src/b.txt
70324e11216ad96e14c38b039c0713099fb87d16 提交readme.txt

  1. 使用命令 git reset --hard HEAD^ 返回上一版本

HEAD表示当前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^ ,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

$ git reset --hard HEAD^
HEAD is now at 7c0b0f1 提交 a.txt src/b.txt
//对于了第二个版本

如果我们想撤回怎么做?和时间一样git没有撤回的功能, 再次使用git log 已经找不到之前的了。

$ git log
commit 7c0b0f1bd72820a3a4f0c2fc9b4a8bbafffdd7fb (HEAD -> master)
Author: wuyihao <592132035@qq.com>
Date:   Tue Apr 21 20:47:46 2020 +0800

    提交 a.txt src/b.txt

commit 70324e11216ad96e14c38b039c0713099fb87d16
Author: wuyihao <592132035@qq.com>
Date:   Tue Apr 21 17:07:03 2020 +0800

    提交readme.txt

但是git有每个版本的记录的 这个记录对于的id 就是commit 那段长长的编码
可以找到 它 使用 命令git reset --hard e5f1f3(这里可以使用部分,只需和其他的记录区分即可) 如果已经关闭git bash
可以使用命令用git reflog查看命令历史,以便确定要回到未来的哪个版本。

操作一下:


$ git reflog
7c0b0f1 (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
e5f1f31 HEAD@{1}: commit: 修改了src/b.txt 内容为change++
7c0b0f1 (HEAD -> master) HEAD@{2}: commit: 提交 a.txt src/b.txt
70324e1 HEAD@{3}: reset: moving to 70324
5c480ec HEAD@{4}: reset: moving to 5c480e
ba6a390 HEAD@{5}: commit: 修改src/b.txt
5c480ec HEAD@{6}: commit: 提交a.txt,src/b.txt
70324e1 HEAD@{7}: commit (initial): 提交readme.txt

$ git reset --hard e5f1f3
HEAD is now at e5f1f31 修改了src/b.txt 内容为change++

$ git log --pretty=oneline
e5f1f31e6674a8bfe92e6c9c915f4f6d5d728a1c (HEAD -> master) 修改了src/b.txt 内容为change++
7c0b0f1bd72820a3a4f0c2fc9b4a8bbafffdd7fb 提交 a.txt src/b.txt
70324e11216ad96e14c38b039c0713099fb87d16 提交readme.txt


小结:
  • HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
  • 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
  • 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

git删除文件夹/文件(不删除本地文件)

先声明一点,如果要同时删除本地的和github上的文件,直接删除本地的再push就行了,比较简单。这里的要求是不能删除本地的文件,而要删除github里,就是网页上的文件。
其实质就是删除缓冲区里的文件,再提交给服务器端。

  1. 首先进入要删除的文件夹或文件的根目录下,如F:\myprojects\supermarketmanager111

  2. 执行下面的语句”some-directory”是相对于本地根目录下的文件夹/文件路径

$ git rm -r --cached some-directory
$ git commit -m 'Remove the now ignored directory "some-directory"'
$ git push origin master
版本库(Repository)

工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

1.第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

2.第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

管理修改

首先这里的修改包括:文件和及其内容的增删改。

在a.txt 后面添加一行 : Git tracks changes.

//先添加
$ git add a.txt
//再查看
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   a.txt

再修改Git tracks changes of files. 然后git commit提交

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

        modified:   a.txt

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:   a.txt


回忆一下修改过程:

第一次修改 -> git add -> 第二次修改 -> git commit

结果
只提交 add 进入 stage的那个版本

你可以发现,Git会告诉你,git checkout – file可以丢弃工作区的修改:

!!!注意!!!

1.一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

2.一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commit或git add时的状态。

$ git checkout -- a.txt
//git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令。

Git同样告诉我们,用命令git reset HEAD 可以把暂存区的修改撤销掉(unstage),重新放回工作区:

$ git reset HEAD a.txt
Unstaged changes after reset:
M	readme.txt

再丢弃已经 修改的部分

$ git checkout -- a.txt

$ git status
On branch master
nothing to commit, working tree clean
删除文件

一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了:

这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了

$ rm readme.txt
$ 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:    readme.txt

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


现在你有两个选择:

  • 一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit
$ git rm readme.txt
rm 'readme.txt'

$ git commit -m "删除readme.txt"
[master b09dade] 删除readme.txt
 1 file changed, 1 deletion(-)
 delete mode 100644 readme.txt

$ git log --pretty=oneline
b09dade6b6dee32abb876cc8459f1ddebc0b614e (HEAD -> master) 删除readme.txt
e5f1f31e6674a8bfe92e6c9c915f4f6d5d728a1c 修改了src/b.txt 内容为change++
7c0b0f1bd72820a3a4f0c2fc9b4a8bbafffdd7fb 提交 a.txt src/b.txt
70324e11216ad96e14c38b039c0713099fb87d16 提交readme.txt

  • 另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:

这里先恢复到删前版本 再操作

$ rm readme.txt

$ 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:    readme.txt

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

$ git checkout -- readme.txt
//成功,注意:
//-- 后面的空格不能漏
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值