Git Bash 相关命令学

基础概念

参考:

https://www.cnblogs.com/gaoht/p/9087070.html

https://www.runoob.com/git/git-branch.html

Git本地数据管理,大概可以分为三个区:

  • 工作区(Working Directory):是可以直接编辑的地方。

  • 暂存区(Stage/Index):数据暂时存放的区域。

  • 版本库(commit History):存放已经提交的数据

1、文件相关

  1. $ cd [路径] (进入到指定的目录)
  2. $ cd .. (返回到上级目录)
  3. $ pwd (显示当前目录)

ls(查看路径相关)

  1. $ ls (显示当前文件夹中的文件与文件夹信息)
  2. $ ls -a (显示出隐藏文件)
  3. $ ls -l (可以查看更多文件信息-文件权限、用户组、文件生成的具体日期)
  4. $ ls -al (类推)

mv (移动文件)

  1. $ mv [源地址和文件名] [目的地址] (移动文件)
  2. $ mv -r [源地址和文件名] [目的地址] (剪切)

touch /echo(创建文件)

区别:

echo 可以在创建文件时给文件指定内容

touch 不能指定文件内容

  1. 例如:
  2. $ echo 'name'>name.txt (创建名为nametxt文本,文本内容使name)
  3. $ touch test.txt (创建名为testtxt文本内容)

cat (查看文件内容)

  1. $ cat [路径和文件名]

2、git分支管理

查看分支

  1. git branch

创建分支

  1. git branch [branch_name]

切换分支

注意:切换分支时,Git会用该分支最后提交的快照替换你的工作目录的内容,因此多个分支不需要多个目录。

  1. git checkout [branch_name]

创建并切换分支

  1. git branch -b [branch_name]

删除分支

  1. git branch -d [branch_name]

例如删除testing分支:

  1. $ git branch
  2. * master
  3. newtest
  4. testing
  5. $ git branch -d testing
  6. Deleted branch testing (was c8fd1bd).
  7. $ git branch
  8. * master
  9. newtest

合并分支

注意: 一旦分支有了独立内容,

  1. git merge [branch_name] (合并branch_name分支到当前分支)
  1. $ git branch
  2. * master
  3. newtest
  4. $ ls
  5. README name.txt
  6. $ git merge newtest
  7. Updating ab1a855..6e74ece
  8. Fast-forward
  9. b.html | 0
  10. name.txt | 1 -
  11. 2 files changed, 1 deletion(-)
  12. create mode 100644 b.html
  13. delete mode 100644 name.txt
  14. $ ls
  15. README b.html

将 newtest 分支合并到主分支中,主分支中的 name.txt 文件被删除。

合并完成后就可以删除分支:

  1. $ git branch -d newtest
  2. Deleted branch newtest (was 6e74ece).

查看状态(删除后):

  1. $ git branch
  2. * master

合并冲突

合并并不仅仅是简单的文件添加、移除的操作,Git也会合并修改。

  1. $ git branch
  2. * master

首先我们创建一个叫做 change_site 的分支并切换过去,我们将 b.html 的内容改为:

  1. <?php
  2. echo 'runoob';
  3. ?>

命令为:

  1. $ git checkout -b change_site
  2. Switched to a new branch 'change_site'
  3. $ echo "<?php echo 'runoob';?>">b.html
  4. $ head -3 b.html
  5. <?php
  6. echo 'runoob';
  7. ?>
  8. $ git commit -am 'changed the b.html'
  9. [change_site 7774248] changed the b.html
  10. 1 file changed, 3 insertions(+)

将修改的内容提交到 change_site 分支中。 现在,假如切换回 master 分支我们可以看内容恢复到我们修改前的(空文件,没有代码),我们再次修改 b.html 文件。

  1. $ git checkout master
  2. Switched to branch 'master'
  3. $ cat b.html
  4. $ vim b.html # 修改内容如下
  5. $ cat b.html
  6. <?php
  7. echo 1;
  8. ?>
  9. $ git diff
  10. warning: LF will be replaced by CRLF in b.html.
  11. The file will have its original line endings in your working directory
  12. diff --git a/b.html b/b.html
  13. index e69de29..ac60739 100644
  14. --- a/b.html
  15. +++ b/b.html
  16. @@ -0,0 +1,3 @@
  17. +<?php
  18. +echo 1;
  19. +?>
  20. $ git commit -am '修改代码'
  21. [master c68142b] 修改代码
  22. 1 file changed, 3 insertions(+)

现在这些改变已经记录到我的 "master" 分支了。接下来我们将 "change_site" 分支合并过来。

  1. $ git merge change_site
  2. Auto-merging b.html
  3. CONFLICT (content): Merge conflict in b.html
  4. Automatic merge failed; fix conflicts and then commit the result.
  5. $ cat b.html # 打开文件,看到冲突内容
  6. <?php
  7. <<<<<<< HEAD
  8. echo 1;
  9. =======
  10. echo 'runoob';
  11. >>>>>>> change_site
  12. ?>

我们将前一个分支合并到 master 分支,一个合并冲突就出现了,接下来我们需要手动去修改它。

  1. $ vim b.html
  2. $ cat b.html
  3. <?php
  4. echo 1;
  5. echo 'runoob';
  6. ?>
  7. $ git diff
  8. diff --cc b.html
  9. index ac60739,33fe008..0000000
  10. --- a/b.html
  11. +++ b/b.html
  12. @@@ -1,3 -1,3 +1,4 @@@
  13. <?php
  14. - echo 'runoob';
  15. +echo 1;
  16. ++echo 'runoob';
  17. ?>

在Git中,我们它可以用 git add 告诉 Git 文件冲突已经解决

  1. $ git status -s
  2. UU b.html
  3. $ git add b.html
  4. $ git status -s
  5. M b.html
  6. $ git commit

3、git rm 相关命令

3.1、rm 命令

作用:删除工作区的文件。

  1. $ rm [文件名]

执行删除命令:

  1. $ rm a.txt

查看状态(成功删除工作区文件):

  1. $ git status
  2. On branch newtest
  3. Changes not staged for commit:
  4. (use "git add/rm <file>..." to update what will be committed)
  5. (use "git restore <file>..." to discard changes in working directory)
  6. deleted: a.txt
  7. no changes added to commit (use "git add" and/or "git commit -a")

rm 命令只是删除工作区的文件,并没有删除版本库的文件

删除版本库文件:

  1. $ git add a.txt
  2. $ git commit -m 'delete a.txt'

结果:删除了工作区和版本库的文件

3.2、git rm 命令

作用:删除工作区文件,并将这次删除放入暂存区。

注意:要删除的文件是没有修改过的,即和当前版本库文件的内容相同。

执行删除命令:

  1. $ git rm name.txt
  2. rm 'name.txt'

成功删除了工作区文件,并将这次删除放入暂存区。

查看状态:

  1. $ git status
  2. On branch newtest
  3. Changes to be committed:
  4. (use "git restore --staged <file>..." to unstage)
  5. deleted: name.txt

提交:

  1. $ git commit -m 'delete name.txt'
  2. [newtest 057f46e] delete name.txt
  3. 1 file changed, 1 deletion(-)
  4. delete mode 100644 name.txt

成功删除了版本库文件。

结果:删除了工作区和版本库的文件,以为暂存区不可能有该文件(如果有,则以为着该文件修改后 git add 到暂存区,那样的话 git rm 命令会报错)

3.3、git rm -f 命令

作用:删除工作区和暂存区文件,并将这次删除放入暂存区

注意:要删除的文件已经修改过,就是说和当前版本库文件内容不同。

a.txt 文件修改过但是还没 git add 到暂存区

  1. $ git rm a.txt
  2. error: the following file has local modifications:
  3. a.txt
  4. (use --cached to keep the file, or -f to force removal)

a.txt 文件修改过已经 git add 到暂存区

  1. $ git add a.txt
  2. $ git rm a.txt
  3. error: the following file has changes staged in the index:
  4. a.txt
  5. (use --cached to keep the file, or -f to force removal)

由上可见文件修改后不管有没有 git add 到暂存区,使用 git rm 命令删除都会报错。

  • 解决办法

执行 git rm -f 命令进行删除:

  1. $ git rm -f a.txt
  2. rm 'a.txt'

成功删除工作区和暂存区文件,并将此次上述放入暂存区

查看状态:

  1. $ git status
  2. On branch newtest
  3. Changes to be committed:
  4. (use "git restore --staged <file>..." to unstage)
  5. deleted: a.txt

提交:

  1. $ git commit -m 'delete a.txt'
  2. [newtest 0d53d62] delete a.txt
  3. 1 file changed, 0 insertions(+), 0 deletions(-)
  4. delete mode 100644 a.txt

成功删除了版本库文件。

  • 结果: 删除了工作区、暂存区和版本库的文件。

git rm --cached 命令

作用:删除暂存区文件,但保留工作区的文件,并将这次删除放入暂存区。

执行删除命令:

  1. $ git rm --cached a.txt
  2. rm 'a.txt'

查看状态(注意这里文件取消了跟踪):

  1. $ git status
  2. On branch newtest
  3. Changes to be committed:
  4. (use "git restore --staged <file>..." to u
  5. deleted: a.txt
  6. Untracked files:
  7. (use "git add <file>..." to include in whae committed)
  8. a.txt

提交:

  1. git commit -m 'delete a.txt'
  2. [newtest 0bdc615] delete a.txt
  3. 1 file changed, 0 insertions(+), 0 deletion
  4. delete mode 100644 a.txt

成功删除了版本库文件。

结果: 删除了暂存区和版本库的文件,但保留了工作区的文件。如果文件有修改并 git add 到暂存区,再执行 git rm --cached 和 git commit,那么保留的工作区文件是修改后的文件,同时暂存区的修改文件和版本库的文件也被删了。

Git 学习相关笔记的更多相关文章

  1. git学习小结 (笔记)

    Modesty helps one to go forward, whereas conceit makes one lag behind. "虚心使人进步,骄傲使人落后" 注:本 ...

  2. git学习相关资料

    入门还是廖大师的博客. 搭建git服务器: http://blog.csdn.net/code_style/article/details/38764203

  3. git学习相关的博客地址

    Git分支管理策略: http://www.ruanyifeng.com/blog/2012/07/git.html Git 使用规范流程: http://www.ruanyifeng.com/blo ...

  4. Git 学习看这篇就够了!

    Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. 可能新手会问"git和github有什么关系啊?" git是一个版本控制工具: githu ...

  5. GIT学习记录4(标签管理与自定义git)

    学习参考地址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 本编随笔只是自己对 ...

  6. GIT学习记录3(分支管理)

    学习参考地址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 本编随笔只是自己对 ...

  7. git学习记录2(远程库管理)

    学习参考地址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 本编随笔只是自己对 ...

  8. git学习记录1(本地库管理)

    学习参考地址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 本编随笔只是自己对 ...

  9. Git学习笔记---协作的一般流程

    一般的操作流程 1.pull 王小坤与另一个同事张大炮一起开发一个项目,张大炮昨天修改了数据库读写的api,优化了执行速度,并把read()函数改名成了Read(),下午下班之前把这些代码push到服 ...

随机推荐

  1. 二:SpringBoot-配置Log4j2,实现不同环境日志打印

    SpringBoot-配置Log4j2,实现不同环境日志打印 日志打印之外观模式 1.日志配置 2.Log4j2的配置文件 3.简单的测试程序 日志打印之外观模式 每一种日志框架都有自己单独的API, ...

  2. HTMl5 特点 标签语法 以及标签

    知识点关于HTML5 的特点以及其标签和标签语法.. <!-- [HTMl5 特点] 向下兼容 用户至上 化繁为简 无插件范围 访问通用性 引入语义 引入原生媒体支持--> <!-- ...

  3. python中字符串的翻转(方法总结)

    Python翻转字符串(reverse string), 一共包含5种方法, 其中第一种最简单, 即步长为-1, 输出字符串; 方法如下 5种方法的比较: 1. 简单的步长为-1, 即字符串的翻转(常 ...

  4. sourcetree注册

    http://www.cnblogs.com/xiofee/p/sourcetree_pass_initialization_setup.html

  5. (27)Vim 3

    Vim移动光标快捷键汇总1.Vim快捷方向键 h 光标向左移动一位 j 光标向下移动一行(以回车为换行符),也就是光标向下移动 k 光标向上移动一行(也就是向上移动) l 光标向右移动一位2.Vim光 ...

  6. Java泛型学习--第一篇

    还是那句话,学习某个知识一定要想想为什么要学它,这方面的知识用来解决什么问题的,怎么用,并且要总结的体系化,不能散的到处都是,方便以后查看博客. 今天参考廖雪峰老师官网学习并总结下泛型廖老师官网 1. ...

  7. 用到的API整理

    时间 淘宝 http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp 获取时间戳,调用效果 { "api" ...

  8. Kwp2000协议的应用(程序原理篇)

    作者:良知犹存 转载授权以及围观:欢迎添加微信:becom_me 总述     接上篇文章Kwp2000协议的应用(硬件原理使用篇),本篇针对kwp2000协议标准的服务ID详细介绍,以及针对程序实现 ...

  9. 【2020杭电多校】Total Eclipse 并查集+思维

    题目链接:Total Eclipse 题意: t组输入,给你一个由n个点,m条边构成的图,每一个点的权值是ai.你每一次可以选择一批联通的点,然后让他们的权值都减去1.问最后把所有点的权值都变成0需要 ...

  10. A - Promotions

    题目详见http://7xjob4.com1.z0.glb.clouddn.com/3f644de6844d64706eb36baa3a0c27b0 这题是普通的拓扑排序,要把每一层的都保存下来. # ...