《Git Bash》

使用Git Bash控制台

常用命令:
pwd 显示当前所在的路径
ll 显示当前目录下的所有文件及文件信息(不含隐藏文件)
ls 显示当前目录下的所有文件(不含隐藏文件、不含文件信息)
ll -A 显示当前目录下的所有文件及文件信息(含隐藏文件)
ls -A 显示当前目录下的所有文件(含隐藏文件、不含文件信息)
~ 表示当前系统用户的根目录
:set nu 在vim编辑器中可以显示行号信息

Git 帮助命令

git help <要查看的命令> 可查看帮助文档

查看帮助文档

Git的区域概述
区域概述
1. 初始化本地库
  • 使用mkdir FileName命令,在当前目录创建一个工作目录(文件夹)
Miner01@DESKTOP-OSMGCMV MINGW64 /c
$ mkdir workspaces
  • 使用git init命令,在当前目录初始化Git本地库
Miner01@DESKTOP-OSMGCMV MINGW64 /c/workspaces/MyGit
$ git init
Initialized empty Git repository in C:/workspaces/MyGit/.git/ 
# 译:
# 在 C:/workspaces/MyGit/.git/目录,初始化了空的Git仓库
  • 使用ll命令查看.git目录下的所有文件
Miner01@DESKTOP-OSMGCMV MINGW64 /c/workspaces/MyGit (master)
$ ll .git/
total 7
-rw-r--r-- 1 Miner01 197121 130 11月 11 21:12 config
-rw-r--r-- 1 Miner01 197121  73 11月 11 21:12 description
-rw-r--r-- 1 Miner01 197121  23 11月 11 21:12 HEAD
drwxr-xr-x 1 Miner01 197121   0 11月 11 21:12 hooks/
drwxr-xr-x 1 Miner01 197121   0 11月 11 21:12 info/
drwxr-xr-x 1 Miner01 197121   0 11月 11 21:12 objects/
drwxr-xr-x 1 Miner01 197121   0 11月 11 21:12 refs/

注意! .git/目录及子目录中的任何文件不能随意修改及删除!

2. 设置签名

作用:区分不同开发人员
此签名与远程库【托管中心】的账户、密码无关

  • 用户级别/仓库级别(仅在当前本地库范围内有效)

    • git config user.name 你的仓库级别的用户名
    • git config user.email 邮箱地址
    • 保存位置 ./.git/config
    Miner01@DESKTOP-OSMGCMV MINGW64 /c/workspaces/MyGit (master)
    $ cat .git/config
    [core]
            repositoryformatversion = 0
            filemode = false
            bare = false
            logallrefupdates = true
            symlinks = false
            ignorecase = true
    [user]
            name = ******
            email = an******@aliyun.com
    
  • 系统用户级别(登陆当前操作系统的用户范围)

    • git config --global user.name 你的系统用户级别的用户名
    • git config --global user.email 邮箱地址
    • 保存位置 ~/.gitconfig
    Miner01@DESKTOP-OSMGCMV MINGW64 ~
    $ cat ~/.gitconfig
    [user]
            name = ******
            email = an******@aliyun.com
    
  • 优先级(就近原则)

    • 两个级别的用户同时存在时,仓库级别优先于系统用户级别
    • 只有某一个级别的签名时,以签名的所属级别为准
    • 两个级别的签名都没有,会报错,不被允许
3. 查看状态
  • 查看状态命令git status
Miner01@DESKTOP-OSMGCMV MINGW64 /c/workspaces/MyGit (master)
$ git status
On branch master | 当前所在的分支为master

No commits yet   | 还没有提交(指本地库)

nothing to commit (create/copy files and use "git add" to track) | 没有可提交的内容(指暂存区)
(创建或复制一个文件到工作区并使用 "git add" 命令去追踪它)
  • 使用vim编辑器创建一个名为demo.txt的文件(按i键进入编辑模式,编辑完成后按Esc键,输入:wq保存退出)
Miner01@DESKTOP-OSMGCMV MINGW64 /c/workspaces/MyGit (master)
$ vim demo.txt
  • 再次使用git status命令,查看状态
Miner01@DESKTOP-OSMGCMV MINGW64 /c/workspaces/MyGit (master)
$ git status
On branch master | 当前所在的分支为master

No commits yet   | 还没有提交(指本地库)

Untracked files: | 未跟踪的文件
  (use "git add ..." to include in what will be committed) | 使用"git add ..."命令添加到缓存区
        demo.txt | 红色显示未跟踪的文件名

nothing added to commit but untracked files present (use "git add" to track) | 没有添加任何提交的内容,但存在未跟踪的文件
(使用 "git add" 进行跟踪)
  • 使用git add命令,追踪未追踪的文件
Miner01@DESKTOP-OSMGCMV MINGW64 /c/workspaces/MyGit (master)
$ git add demo.txt
warning: LF will be replaced by CRLF in demo.txt. | 警告: 在demo.txt中,LF将被CRLF取代
The file will have its original line endings in your working directory | 该文件将在您的工作目录中具有其原始行结尾
  • 再次使用git status命令,查看状态
Miner01@DESKTOP-OSMGCMV MINGW64 /c/workspaces/MyGit (master)
$ git status
On branch master | 当前所在的分支为master

No commits yet   | 还没有提交(指本地库)

Changes to be committed: | 需要提交的更改
  (use "git rm --cached ..." to unstage) | (使用 "git rm --cached <文件名>…" 命令,从暂存区删除文件,还原未追踪状态)
        new file:   demo.txt | 绿色显示已追踪且存入暂存区的文件名
  • 使用git commit -m "本次提交内容的简要说明"命令,提交暂存区的文件到本地库
Miner01@DESKTOP-OSMGCMV MINGW64 /c/workspaces/MyGit (master)
$ git commit -m "第一次提交本地库测试文件demo.txt"
[master (root-commit) f7d88bb]    | 第一次提交本地库测试文件demo.txt
 1 file changed, 3 insertions(+)  | 本次提交的文件数量,有3行的增量变更
 create mode 100644 demo.txt      | 创建模式 100644
  • 再次使用git status命令,查看状态
Miner01@DESKTOP-OSMGCMV MINGW64 /c/workspaces/MyGit (master)
$ git status
On branch master | 当前所在的分支为master
nothing to commit, working tree clean | 没有可提交的内容,工作区与本地库内容一致
  • 使用vim修改demo.txt后,再使用git status命令,查看状态
Miner01@DESKTOP-OSMGCMV MINGW64 /c/workspaces/MyGit (master)
$ git status
On branch master | 当前所在的分支为master 
Changes not staged for commit: | 有更改但未提交到暂存区
  (use "git add ..." to update what will be committed) | 使用"Git add " 命令,提交更新内容到暂存区
  (use "git restore ..." to discard changes in working directory) | 使用 "git restore " 放弃工作目录中的更改
        modified:   demo.txt | 有修改,但未提交的文件名

no changes added to commit (use "git add" and/or "git commit -a")
| 有更改的内容未提交
| 可以先使用 "git add" 提交到缓存区再使用 "git commit -a" 命令,提交更改到本地库
| 也可以直接使用 "git commit -a"命令,提交更改到本地库
4. 查看本地库日志
  • 使用 git log 命令
    查看本地库的全部日志信息
    内容太多一屏幕显示不下的话:使用 空格键 向下翻页,B键 向上翻页,Q键 退出
Admin@Admin-PC MINGW64 /c/workspaces/MyGit (master)
$ git log
commit 02c13fff55888f62ced9961ce3ef63441f4e857f (HEAD -> master) | 哈希值及指针指向的分支
Author: N5DL80  | 提交者信息
Date:   Tue Nov 12 14:04:10 2019 +0800  | 提交日期时间

    第一次提交本地库 demo.txt
  • 使用 git log --pretty=oneline 命令
    查看列表形式的日志信息,不显示提交信息
Admin@Admin-PC MINGW64 /c/workspaces/MyGit (master)
$ git log --pretty=oneline
02c13fff55888f62ced9961ce3ef63441f4e857f (HEAD -> master) 第一次向本地库提交 demo.txt
  • 使用 git log --oneline 命令
    查看列表形式的日志信息,不显示提交信息,并简化哈希值
Admin@Admin-PC MINGW64 /c/workspaces/MyGit (master)
$ git log --oneline
02c13ff (HEAD -> master) 第一次向本地库提交 demo.txt
  • 使用 git reflog 命令
    查看列表形式的日志信息,不显示提交信息,并简化哈希值且显示指针索引
Admin@Admin-PC MINGW64 /c/workspaces/MyGit (master)
$ git reflog
a6a680c (HEAD -> master) HEAD@{0}: commit: 第三次向本地库提交 demo.txt
17983a6 HEAD@{1}: commit: 第二次向本地库提交 demo.txt
02c13ff HEAD@{2}: commit (initial): 第一次向本地库提交 demo.txt
5. 基于历史版本的回滚及前进
  • 使用 git reset --hard <索引值> 命令,基于索引值(根据版本的索引值可进可退)
Admin@Admin-PC MINGW64 /c/workspaces/MyGit (master)
$ git reset --hard 02c13ff
HEAD is now at 02c13ff 第一次向本地库提交 demo.txt | 回滚后指针指向的版本
  • 使用 git reset --hard HEAD^ 命令,基于^符号 (只能向后回滚,且一个^符号向后退一步,可多个^符号一起使用)
Admin@Admin-PC MINGW64 /c/workspaces/MyGit (master)
$ git reset --hard HEAD^
HEAD is now at 17983a6 第二次向本地库提交 demo.txt
  • 使用 git reset --hard HEAD~<要回滚的步数> 命令,基于~ 符号(只能向后回滚)
Admin@Admin-PC MINGW64 /c/workspaces/MyGit (master)
$ git reset --hard HEAD~1
HEAD is now at 02c13ff 第一次向本地库提交 demo.txt
  • reset 的三个参数
    • git reset --soft 命令
      • 仅仅在本地库移动HEAD指针(不会重置暂存区和工作区)
    • git reset --mixed 命令
      • 在本地库移动HEAD指针
      • 重置暂存区(使之保持与本地库指针指向的版本内容一致)
    • git reset --hard 命令
      • 在本地库移动HEAD指针
      • 重置暂存区(使之保持与本地库指针指向的版本内容一致)
      • 重置工作区(使之保持与本地库指针指向的版本内容一致)
  1. 删除本地库内容

    • 第一步,在工作区使用 rm <要删除的文件名> 命令,删除文件
    Admin@Admin-PC MINGW64 /c/workspaces/MyGit (master)
    $ rm rm_test.txt
    
    • 第二步,把删除文件这个操作使用 git add <已删除的文件名> 命令,提交的暂存区
    Admin@Admin-PC MINGW64 /c/workspaces/MyGit (master)
    $ git add rm_test.txt
    
    • 第三步,把暂存区待执行的操作使用 git commit -m "删除此文件的说明" 提交到本地库
    Admin@Admin-PC MINGW64 /c/workspaces/MyGit (master)
    $ git commit -m "删除测试文件"
    [master c32010a] 删除测试文件
    1 file changed, 1 deletion(-)  | 执行了一个更改文件的操作,一个文件被删除
    delete mode 100644 rm_test.txt | 删除模式100644 删除的文件名:rm_test.txt
    
  2. 找回被删除的文件

    • 使用 git reset -- hard <版本的索引> 回滚操作可以找回已经在本地库删除的文件
    • 如果工作区删除了文件,并且已经提交到暂存区,但是未提交到本地库的情况下:使用 git reset --hard HEAD 命令,使本地库的指针指向当前版本,并重置暂存区和工作区,就找回了被删除且提交到暂存区的文件
  3. 文件的比较

    • 使用 git diff <要比较的文件名> 命令, 将工作区的文件与暂存区的文件比较
    Admin@Admin-PC MINGW64 /c/workspaces/MyGit (master)
    $ git diff demo.txt
    diff --git a/demo.txt b/demo.txt
    index 8d47907..b9b8e6a 100644
    --- a/demo.txt
    +++ b/demo.txt
    @@ -1,5 +1,6 @@
    0  111  | 工作区文件与暂存区一致的行
    1  222  | 工作区文件与暂存区一致的行
    2 -333      | 暂存区的原始文件在本行的内容
    2 +3333     | 工作区修改后的文件在本行的内容
    3  444  | 工作区文件与暂存区一致的行
    4  555  | 工作区文件与暂存区一致的行
    5 +666      | 工作区修改后的文件在本行的内容
    
    • 使用 git diff HEAD <要比较的文件名> 命令, 将工作区的文件与本地库当前版本的文件比较
    Admin@Admin-PC MINGW64 /c/workspaces/MyGit (master)
    $ git diff HEAD demo.txt
    diff --git a/demo.txt b/demo.txt
    index 8d47907..b9b8e6a 100644
    --- a/demo.txt
    +++ b/demo.txt
    @@ -1,5 +1,6 @@
    0  111  | 工作区文件与本地库一致的行
    1  222  | 工作区文件与本地库一致的行
    2 -333      | 本地库的原始文件在本行的内容
    2 +3333     | 工作区修改后的文件在本行的内容
    3  444  | 工作区文件与本地库一致的行
    4  555  | 工作区文件与本地库一致的行
    5 +666      | 工作区修改后的文件在本行的内容
    
    • 使用 git diff HEAD <版本索引> <要比较的文件名> 命令, 将本地库当前指针指向的版本文件与本地库的指定版本文件比较
    Admin@Admin-PC MINGW64 /c/workspaces/MyGit (master)
    $ git diff HEAD 02c13ff demo.txt
    diff --git a/demo.txt b/demo.txt
    index 8d47907..641d574 100644
    --- a/demo.txt
    +++ b/demo.txt
    @@ -1,5 +1,3 @@
    0  111 | 工作区文件与本地库某历史版本一致的行
    1  222 | 工作区文件与本地库某历史版本一致的行
    2  333 | 工作区文件与本地库某历史版本一致的行
    3 -444     | 工作区文件与本地库某历史版本不一致的行
    4 -555     | 工作区文件与本地库某历史版本不一致的行
    
    • 命令最后不带文件名将比较工作区的所有文件
  4. Git 分支

    • 使用 git branch -v 命令,查看当前本地库的所有分支
    Vivian@DESKTOP-KTT0C4K MINGW64 /c/workspaces/DemoGit (master)
    $ git branch -v
    * master 87916d5 新建名为demo.txt的文件
    
    • 使用 git branch <要创建的分支名称> 命令,创建一个分支
    Vivian@DESKTOP-KTT0C4K MINGW64 /c/workspaces/DemoGit (master)
    $ git branch test_branch | 创建一个名为test_branch的分支
    
    Vivian@DESKTOP-KTT0C4K MINGW64 /c/workspaces/DemoGit (master)
    $ git branch -v  | 查看当前本地库的所有分支
    * master      87916d5 新建名为demo.txt的文件 | 当前分支
      test_branch 87916d5 新建名为demo.txt的文件 | 新创建的分支
    
    • 使用 git checkout <分支名称> 命令,切换分支
    Vivian@DESKTOP-KTT0C4K MINGW64 /c/workspaces/DemoGit (master)
    $ git checkout test_branch
    Switched to branch 'test_branch' | 切换到分支'test_branch'
    
    Vivian@DESKTOP-KTT0C4K MINGW64 /c/workspaces/DemoGit (test_branch)
    $ 已经切换到了(test_branch)分支
    
    • 使用 git merge <要与当前分支合并的分支名称> 命令,合并分支
      注意!合并前确保当前分支为被更新的分支
    Vivian@DESKTOP-KTT0C4K MINGW64 /c/workspaces/DemoGit (master)
    $ git merge test_branch   | 把(test_barch)分支上的修改合并到当前(master)分支上
    Updating 87916d5..cf8ec68 | 更新版本
    Fast-forward     | 快进(不明所以)
     demo.txt | 1 +  | 受影响的文件名 | 1条内容受到影响
     1 file changed, 1 insertion(+) | 一个文件被更改了,插入了一行
    
    • 分支冲突
      当两个分支的同一个文件的同一行同时被修改时,会产生冲突
    Vivian@DESKTOP-KTT0C4K MINGW64 /c/workspaces/DemoGit (master)
    $ git merge test_branch  | 合并分支命令
    Auto-merging demo.txt    | 自动合并 demo.txt
    CONFLICT (content): Merge conflict in demo.txt | 合并时demo.txt中存在内容冲突
    Automatic merge failed; fix conflicts and then commit the result.
    自动合并失败;修复冲突,然后提交结果
    Vivian@DESKTOP-KTT0C4K MINGW64 /c/workspaces/DemoGit (master|MERGING) | 修复模式
    $ 在这里键入命令修复何必冲突
    
    • 解决冲突,使用 vim <冲突的文件名称> 命令,打开冲突文件
    new file name demo.txt
    在test_branch分支做了此行修改,用于测试合并分支
    <<<<<<< HEAD                                               | Git添加的冲突标记 
    测试合并分支已完成                                           | 这部分为当前master分支demo.txt的更新内容
    在master分支修改demo.txt第4行,用于测试合并冲突
    =======                                                    | Git添加的冲突标记 
    合并分支测试完成                                             | 这部分为test_branch分支demo.txt的更新内容
    在test_branch分支中修改demo.txt文件的第4行,用于测试合并分支冲突
    >>>>>>> test_branch                                        | Git添加的冲突标记 
    
    当产生冲突时git会在适当位置插入标记,来提醒哪个是当前master分支的更新内容,
    哪个是test_branch分支的更新内容。删除标记后,编辑文件到满意后保存退出
    
    • 使用 git status 命令,查看状态
    Vivian@DESKTOP-KTT0C4K MINGW64 /d/傻/workspaces/DemoGit (master|MERGING)
    $ git status
    On branch master  | 当前所在的分支为master
    You have unmerged paths.  | 您有未合并的路径
      (fix conflicts and run "git commit") | (修复冲突并运行 "git commit" 命令)
      (use "git merge --abort" to abort the merge) | (使用 "git merge --abort" 命令,终止合并)
    
    Unmerged paths: | 未合并的路径:
      (use "git add ..." to mark resolution) | (使用 "git add <文件>" 命令,把已解决的冲突文件提交到暂存区)
            both modified:   demo.txt | 冲突问题被修改好了: demo.txt
    
    no changes added to commit (use "git add" and/or "git commit -a")
    | 有更改的内容未提交
    | 可以先使用 "git add" 提交到缓存区再使用 "git commit -a" 命令,提交更改到本地库
    | 也可以直接使用 "git commit -a"命令,提交更改到本地库
    

    使用 git add <已解决的冲突的文件名> 命令, 提交到暂存区

    Vivian@DESKTOP-KTT0C4K MINGW64 /c/workspaces/DemoGit (master|MERGING)
    $ git add demo.txt
    

    使用 git status 命令,查看状态

    Vivian@DESKTOP-KTT0C4K MINGW64 /c/workspaces/DemoGit (master|MERGING)
    $ git status
    On branch master                                | 在master分支上
    All conflicts fixed but you are still merging.  | 所有冲突已解决,但您仍在合并状态中。
      (use "git commit" to conclude merge)          | (使用 "git commit" 命令,结束合并状态)
    
    Changes to be committed:                        | 要做更改是:
            modified:   demo.txt                    | 修改:demo.txt
    

    使用 git commit 命令, 提交修改到本地库并结束合并状态
    *在合并状态中使用 git commit 命令时,不能带文件名 *

     Vivian@DESKTOP-KTT0C4K MINGW64 /c/workspaces/DemoGit (master|MERGING)
    $ git commit -m "冲突已解决,提交修改到本地库"
    [master 0b2c481] 冲突已解决,提交修改到本地库
    

  1. 与远程库GitHub进行交互

    使用 git remote -v 命令,查看远程库地址别名

    Miner01@DESKTOP-OSMGCMV MINGW64 ~/Desktop/OKExData (master)
    $ git remote -v 
    $ 目前什么都有
    

    使用 git romote add <别名> <远程库地址> 命令,保存一个远程库地址的别名

    Miner01@DESKTOP-OSMGCMV MINGW64 ~/Desktop/OKExData (master)
    $ git remote add origin https://github.com/N5DL80/OKExData.git
    
    Miner01@DESKTOP-OSMGCMV MINGW64 ~/Desktop/OKExData (master)
    $ git remote -v
    origin  https://github.com/N5DL80/OKExData.git (fetch) | 拉取远程库地址
    origin  https://github.com/N5DL80/OKExData.git (push)  | 推送远程库地址
    

    使用 git push <远程库地址别名> <要推送的分支> 命令, 把本地库的内容推送到远程库

     Miner01@DESKTOP-OSMGCMV MINGW64 ~/Desktop/OKExData (master)
    $ git push origin master
    Enumerating objects: 33, done.
    Counting objects: 100% (33/33), done.
    Delta compression using up to 4 threads
    Compressing objects: 100% (32/32), done.
    Writing objects: 100% (33/33), 551.83 KiB | 5.36 MiB/s, done.
    Total 33 (delta 0), reused 0 (delta 0)
    To https://github.com/N5DL80/OKExData.git
     * [new branch]      master -> master
    
    输入GitHub的用户名和密码

    使用 git clone <远程库地址> 命令,拉取远程库的内容到本地当前目录下

    • 此命令包含三个内容:
      1. 克隆远程库内容到本地
      2. 初始化.git/目录
      3. 创建远程库地址别名origin
    Miner01@DESKTOP-OSMGCMV MINGW64 /c/workspaces
    $ git clone https://github.com/N5DL80/OKExData.git
    Cloning into 'OKExData'...
    remote: Enumerating objects: 33, done.
    remote: Counting objects: 100% (33/33), done.
    remote: Compressing objects: 100% (32/32), done.
    remote: Total 33 (delta 0), reused 33 (delta 0), pack-reused 0
    Unpacking objects: 100% (33/33), done.
    

    使用 git pull <远程库地址> 或 <远程库地址别名> <远程库分支> 命令,将替代以下两个步骤,同时完成拉取与合并远程库内容到本地库

    Miner01@DESKTOP-OSMGCMV MINGW64 ~/Desktop/OKExData (master)
    $ git pull https://github.com/N5DL80/OKExData.git
    From https://github.com/N5DL80/OKExData
     * branch            HEAD       -> FETCH_HEAD
    Updating e024a1c..a154f2b
    Fast-forward
     README.md | 2 ++
     1 file changed, 2 insertions(+)
     create mode 100644 README.md
    
    • 拉取、合并也可分为两个步骤进行
      1. 使用 git fetch <远程库别名> <要拉取的分支> 命令, 把远程库内容拉取到本地库,但不会合并远程库的分支和本地库的分支,所以本地的内容跟远程库内容并不一致
        Miner01@DESKTOP-OSMGCMV MINGW64 ~/Desktop/OKExData (master)
        $ git fetch https://github.com/N5DL80/OKExData.git
        remote: Enumerating objects: 7, done.
        remote: Counting objects: 100% (7/7), done.
        remote: Compressing objects: 100% (6/6), done.
        remote: Total 6 (delta 0), reused 0 (delta 0), pack-reused 0
        Unpacking objects: 100% (6/6), done.
        From https://github.com/N5DL80/OKExData
         * branch            HEAD       -> FETCH_HEAD
        
      2. 使用 git merge <远程库分支> 命令, 合并分支后本地内容与远程库内容才会保持一致
         Miner01@DESKTOP-OSMGCMV MINGW64 ~/Desktop/OKExData (master)
         $ git merge origin/master
         Already up to date. | 已经更新了
        

你可能感兴趣的:(《Git Bash》)