Git 学习相关笔记
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、文件相关
$ cd [路径] (进入到指定的目录)
$ cd .. (返回到上级目录)
$ pwd (显示当前目录)
ls(查看路径相关)
$ ls (显示当前文件夹中的文件与文件夹信息)
$ ls -a (显示出隐藏文件)
$ ls -l (可以查看更多文件信息-文件权限、用户组、文件生成的具体日期)
$ ls -al (类推)
mv (移动文件)
$ mv [源地址和文件名] [目的地址] (移动文件)
$ mv -r [源地址和文件名] [目的地址] (剪切)
touch /echo(创建文件)
区别:
echo 可以在创建文件时给文件指定内容
touch 不能指定文件内容
例如:
$ echo 'name'>name.txt (创建名为name的txt文本,文本内容使name)
$ touch test.txt (创建名为test的txt文本内容)
cat (查看文件内容)
$ cat [路径和文件名]
2、git分支管理
查看分支
git branch
创建分支
git branch [branch_name]
切换分支
注意:切换分支时,Git会用该分支最后提交的快照替换你的工作目录的内容,因此多个分支不需要多个目录。
git checkout [branch_name]
创建并切换分支
git branch -b [branch_name]
删除分支
git branch -d [branch_name]
例如删除testing分支:
$ git branch
* master
newtest
testing
$ git branch -d testing
Deleted branch testing (was c8fd1bd).
$ git branch
* master
newtest
合并分支
注意: 一旦分支有了独立内容,
git merge [branch_name] (合并branch_name分支到当前分支)
$ git branch
* master
newtest
$ ls
README name.txt
$ git merge newtest
Updating ab1a855..6e74ece
Fast-forward
b.html | 0
name.txt | 1 -
2 files changed, 1 deletion(-)
create mode 100644 b.html
delete mode 100644 name.txt
$ ls
README b.html
将 newtest 分支合并到主分支中,主分支中的 name.txt 文件被删除。
合并完成后就可以删除分支:
$ git branch -d newtest
Deleted branch newtest (was 6e74ece).
查看状态(删除后):
$ git branch
* master
合并冲突
合并并不仅仅是简单的文件添加、移除的操作,Git也会合并修改。
$ git branch
* master
首先我们创建一个叫做 change_site 的分支并切换过去,我们将 b.html 的内容改为:
<?php
echo 'runoob';
?>
命令为:
$ git checkout -b change_site
Switched to a new branch 'change_site'
$ echo "<?php echo 'runoob';?>">b.html
$ head -3 b.html
<?php
echo 'runoob';
?>
$ git commit -am 'changed the b.html'
[change_site 7774248] changed the b.html
1 file changed, 3 insertions(+)
将修改的内容提交到 change_site 分支中。 现在,假如切换回 master 分支我们可以看内容恢复到我们修改前的(空文件,没有代码),我们再次修改 b.html 文件。
$ git checkout master
Switched to branch 'master'
$ cat b.html
$ vim b.html # 修改内容如下
$ cat b.html
<?php
echo 1;
?>
$ git diff
warning: LF will be replaced by CRLF in b.html.
The file will have its original line endings in your working directory
diff --git a/b.html b/b.html
index e69de29..ac60739 100644
--- a/b.html
+++ b/b.html
@@ -0,0 +1,3 @@
+<?php
+echo 1;
+?>
$ git commit -am '修改代码'
[master c68142b] 修改代码
1 file changed, 3 insertions(+)
现在这些改变已经记录到我的 "master" 分支了。接下来我们将 "change_site" 分支合并过来。
$ git merge change_site
Auto-merging b.html
CONFLICT (content): Merge conflict in b.html
Automatic merge failed; fix conflicts and then commit the result.
$ cat b.html # 打开文件,看到冲突内容
<?php
<<<<<<< HEAD
echo 1;
=======
echo 'runoob';
>>>>>>> change_site
?>
我们将前一个分支合并到 master 分支,一个合并冲突就出现了,接下来我们需要手动去修改它。
$ vim b.html
$ cat b.html
<?php
echo 1;
echo 'runoob';
?>
$ git diff
diff --cc b.html
index ac60739,33fe008..0000000
--- a/b.html
+++ b/b.html
@@@ -1,3 -1,3 +1,4 @@@
<?php
- echo 'runoob';
+echo 1;
++echo 'runoob';
?>
在Git中,我们它可以用 git add 告诉 Git 文件冲突已经解决
$ git status -s
UU b.html
$ git add b.html
$ git status -s
M b.html
$ git commit
3、git rm 相关命令
3.1、rm 命令
作用:删除工作区的文件。
$ rm [文件名]
执行删除命令:
$ rm a.txt
查看状态(成功删除工作区文件):
$ git status
On branch newtest
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
deleted: a.txt
no changes added to commit (use "git add" and/or "git commit -a")
rm 命令只是删除工作区的文件,并没有删除版本库的文件
删除版本库文件:
$ git add a.txt
$ git commit -m 'delete a.txt'
结果:删除了工作区和版本库的文件
3.2、git rm 命令
作用:删除工作区文件,并将这次删除放入暂存区。
注意:要删除的文件是没有修改过的,即和当前版本库文件的内容相同。
执行删除命令:
$ git rm name.txt
rm 'name.txt'
成功删除了工作区文件,并将这次删除放入暂存区。
查看状态:
$ git status
On branch newtest
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted: name.txt
提交:
$ git commit -m 'delete name.txt'
[newtest 057f46e] delete name.txt
1 file changed, 1 deletion(-)
delete mode 100644 name.txt
成功删除了版本库文件。
结果:删除了工作区和版本库的文件,以为暂存区不可能有该文件(如果有,则以为着该文件修改后 git add 到暂存区,那样的话 git rm 命令会报错)
3.3、git rm -f 命令
作用:删除工作区和暂存区文件,并将这次删除放入暂存区
注意:要删除的文件已经修改过,就是说和当前版本库文件内容不同。
a.txt 文件修改过但是还没 git add 到暂存区
$ git rm a.txt
error: the following file has local modifications:
a.txt
(use --cached to keep the file, or -f to force removal)
a.txt 文件修改过已经 git add 到暂存区
$ git add a.txt
$ git rm a.txt
error: the following file has changes staged in the index:
a.txt
(use --cached to keep the file, or -f to force removal)
由上可见文件修改后不管有没有 git add 到暂存区,使用 git rm 命令删除都会报错。
- 解决办法
执行 git rm -f 命令进行删除:
$ git rm -f a.txt
rm 'a.txt'
成功删除工作区和暂存区文件,并将此次上述放入暂存区
查看状态:
$ git status
On branch newtest
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted: a.txt
提交:
$ git commit -m 'delete a.txt'
[newtest 0d53d62] delete a.txt
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 a.txt
成功删除了版本库文件。
- 结果: 删除了工作区、暂存区和版本库的文件。
git rm --cached 命令
作用:删除暂存区文件,但保留工作区的文件,并将这次删除放入暂存区。
执行删除命令:
$ git rm --cached a.txt
rm 'a.txt'
查看状态(注意这里文件取消了跟踪):
$ git status
On branch newtest
Changes to be committed:
(use "git restore --staged <file>..." to u
deleted: a.txt
Untracked files:
(use "git add <file>..." to include in whae committed)
a.txt
提交:
git commit -m 'delete a.txt'
[newtest 0bdc615] delete a.txt
1 file changed, 0 insertions(+), 0 deletion
delete mode 100644 a.txt
成功删除了版本库文件。
结果: 删除了暂存区和版本库的文件,但保留了工作区的文件。如果文件有修改并 git add 到暂存区,再执行 git rm --cached 和 git commit,那么保留的工作区文件是修改后的文件,同时暂存区的修改文件和版本库的文件也被删了。
Git 学习相关笔记的更多相关文章
- git学习小结 (笔记)
Modesty helps one to go forward, whereas conceit makes one lag behind. "虚心使人进步,骄傲使人落后" 注:本 ...
- git学习相关资料
入门还是廖大师的博客. 搭建git服务器: http://blog.csdn.net/code_style/article/details/38764203
- git学习相关的博客地址
Git分支管理策略: http://www.ruanyifeng.com/blog/2012/07/git.html Git 使用规范流程: http://www.ruanyifeng.com/blo ...
- Git 学习看这篇就够了!
Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. 可能新手会问"git和github有什么关系啊?" git是一个版本控制工具: githu ...
- GIT学习记录4(标签管理与自定义git)
学习参考地址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 本编随笔只是自己对 ...
- GIT学习记录3(分支管理)
学习参考地址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 本编随笔只是自己对 ...
- git学习记录2(远程库管理)
学习参考地址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 本编随笔只是自己对 ...
- git学习记录1(本地库管理)
学习参考地址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 本编随笔只是自己对 ...
- Git学习笔记---协作的一般流程
一般的操作流程 1.pull 王小坤与另一个同事张大炮一起开发一个项目,张大炮昨天修改了数据库读写的api,优化了执行速度,并把read()函数改名成了Read(),下午下班之前把这些代码push到服 ...
随机推荐
- okhttp踩坑
ResponseBody.string() 平常我们用的客户端http调用工具一般是RestTemplate,HttpClient,okhttp,以前使用过前两者,没咋接触过okhttp,我看公司 ...
- EasyUI框架
使用EasyUI框架时,需要导入3个包在项目js文件夹之中. 在项目之中,每次需先引入相关文件: <!--引入jquery--> <script src="../js/jq ...
- JDBC连接Oracle实现增、删、改操作
jsp页面的form表单 AddMentaction实现向数据新增数据操作 DeleteMent删除操作 UpdateMent修改操作 最近在做一个练习项目"在线考试系统",在将整 ...
- Mybatis(二)实例练习
文章目录 实例练习Mybatis,实现一个简单的登录功能. 增.删.改:操作返回Int类型. 查询操作返回实体对象. 首先需要导入相关的包. #导包: #建表 在数据库中新建一个用户mybatis,然 ...
- 开发基础 (变量、数据类型、格式化输出、运算符、流程控制、while循环)
一.变量 name = "SmallNine" 等号前面是变量名(标识符),等号后面是变量值 变量的主要作用:就是把程序运算的中间结果临时存到内存里,已备后面的代码继续调用. 变量 ...
- checkAll操作
//全部勾选 function checkAll(obj) { var cols = document.getElementsByName('cols'); for ( var i = 0; null ...
- HashMap 和 Hashtable两者的区别以和解释
HashMap 和 Hashtable 是 Java 开发程序员必须要掌握的,也是在各种 Java 面试场合中必须会问到的. 但你对这两者的区别了解有多少呢? 现在,栈长我给大家总结一下,或许有你不明 ...
- linux(5)查看历史命令执行记录history
前言 我们每次敲打linux命令的时候,有时候想用之前用过的命令,一般情况下,我们都会按↑↓箭头来寻找历史的命令记录,那如果我想用1天前执行的某条命令,难道还要按↑100次?显示这样是不现实的,我们可 ...
- Qt项目的发布
Qt项目的发布 (1)首先将项目调为发布版 (2)找到缺失的DLL文件 发布好了后,双击生成的exe文件可能会出现如下的问题 像这样的错误警告可能会弹出好几个,对于这种错误有2种解决方案. 第一种:配 ...
- DICOM医学文件的解析
最近导师一直让做智慧医疗的一个项目,这里面涉及到DICOM格式的文件处理,在这里分享一下自己学到的关于DCM文件的一些内容. DICOM DICOM(DigitalImaging andCommuni ...