git命令使用心得

最近学习了一下git命令来操作一下库,发现git命令虽然不多(当然也不算少),但是它们组合起来功能很强大,更重要的是很多命令在不同的状态下发挥的效果不一样,本博文总结了一下git命令,并详细说明了一些命令的使用场景。

Git命令

命令小结

命令 功能
git init 把当前文件夹初始化为默认的git库
git add 文件名 向git库中添加一个文件
git rm 文件名 从git库中删除一个文件
git status 查看当前库中进行的任务
git diff 文件名 add前查看工作区和暂存区的差别
git commit -m “修改内容” 把修改内容提交上去,用于区别版本
git checkout – 文件名 在add之前把文件恢复到上次交付,在commit之前恢复到暂存区的状态
git log [–pretty=oneline] 显示这个库里都干过啥
git relog 查看命令历史,以便确定要回到未来的哪个版本
git reset HEAD 文件名 可以把暂存区的修改撤销掉
git reset –hard HEAD^ 回退到上一个版本
git reset –hard 版本号 回退到某个版本

注意如果一个库里的很多文件是合用一个版本号的,也就是说变更版本号后,对应的所有的文件都会回退;

基本命令

git 建立库,我们是在工作区中修改文件的,工作区可以有很多文件;

git add 可以把工作区(working tree)下修改的文件或添加的文件添加到暂时存储的区域(index file);

git commit 做的事情是把index file中修改提交到分支里,默认的分区是master;

git diff

diff 就是difference的意思,查看不同,根据工作区(working tree)、缓存区(index file)和版本区(master)的不同,药效不一样哦 -_-!

1. git diff 文件名:是查看working tree与index file 的差别的。也就是说修改之后add之前可以用这个看改了什么;

2. git diff – cached:是查看index file与master的差别的。add之后,如果你忘记所有文件做的修改是什么,用这个;

3. git diff HEAD 文件名:是查看working tree和master的差别的。add之后,可以用这个看具体每个文件改了什么;

举个栗子

在工作区新建一个文件hello.cpp

#include<iostream>
using namespace std;
int main()
{
        cout<<"快使用"<<endl;
        return 0;
}

然后添加到版本库里面

$ git add hello.cpp
$ git commit -m "新建hello.cpp"
[master 86a0afb] 新建hello.cpp
 1 file changed, 7 insertions(+)
 create mode 100644 hello.cpp
$ git status
位于分支 master
无文件要提交,干净的工作区

然后修改hello.cpp文件

#include<iostream>
using namespace std;
int main()
{
        cout<<"快使用双截棍"<<endl;
        return 0;
}

添加到暂存区里

$ git add hello.cpp
$ git status
位于分支 master
要提交的变更:
  (使用 "git reset HEAD <file>..." 撤出暂存区)

    修改:     hello.cpp

再修改hello.cpp文件

#include<iostream>
using namespace std;
int main()
{
        cout<<"快使用双截棍,嗯哪咋地"<<endl;
        return 0;
}

这时候工作区、暂存区、版本区的文件都不一样啦

$ git status
位于分支 master
要提交的变更:
  (使用 "git reset HEAD <file>..." 撤出暂存区)

    修改:     hello.cpp

尚未暂存以备提交的变更:
  (使用 "git add <file>..." 更新要提交的内容)
  (使用 "git checkout -- <file>..." 丢弃工作区的改动)

    修改:     hello.cpp

使用git diff命令来一一查看哈

$ git diff hello.cpp
diff --git a/hello.cpp b/hello.cpp
index 4cbc284..32531fa 100644
--- a/hello.cpp
+++ b/hello.cpp
@@ -2,6 +2,6 @@
 using namespace std;
 int main()
 {
-       cout<<"快使用双截棍"<<endl;
+       cout<<"快使用双截棍,嗯哪咋地"<<endl;
        return 0;
 }

上面第10行是暂存区中的内容,而第11行是工作区中的内容,说明git diff 文件名 比较的是暂存区与工作区的内容。其实这里如果用git diff – 文件名也能达到相同的效果,关于 – 的用法会在后面相信讨论。

$ git diff --cached
diff --git a/hello.cpp b/hello.cpp
index 4cadd9e..4cbc284 100644
--- a/hello.cpp
+++ b/hello.cpp
@@ -2,6 +2,6 @@
 using namespace std;
 int main()
 {
-       cout<<"快使用"<<endl;
+       cout<<"快使用双截棍"<<endl;
        return 0;
 }

第10行是版本库的内容,第11行是暂存区中的内容,说明git diff –cached比较的是版本库与暂存区的内容

$ git diff HEAD hello.cpp
diff --git a/hello.cpp b/hello.cpp
index 4cadd9e..32531fa 100644
--- a/hello.cpp
+++ b/hello.cpp
@@ -2,6 +2,6 @@
 using namespace std;
 int main()
 {
-       cout<<"快使用"<<endl;
+       cout<<"快使用双截棍,嗯哪咋地"<<endl;
        return 0;
 }

比较的是版本库与工作区的内容;

git checkout – 文件名

case 1. git checkout – 文件名,在修改文件后add到暂存区之前用版本区的文件替换工作区的,

case 2. 在add到缓存区后,commit到版本区之前,再一次修改文件,就用暂存区中的文件覆盖工作区,

$ git checkout -- hello.cpp
$ cat hello.cpp
#include<iostream>
using namespace std;
int main()
{
    cout<<"快使用双截棍"<<endl;
    return 0;
}
[email protected]virtual-machine:~/code/learngit$

case 3.在add到缓存区后,commit到版本区之前,再一次修改文件,如果想用版本区的文件覆盖可以有两种做法:

方法一:

$ git checkout HEAD hello.cpp
$ cat hello.cpp
#include<iostream>
using namespace std;
int main()
{
    cout<<"快使用"<<endl;
    return 0;
}
$ git status
位于分支 master
无文件要提交,干净的工作区

HEAD是当前版本库的意思,这种做法顺便将暂存区清空了

方法二:

$ git reset HEAD
重置后撤出暂存区的变更:
M   hello.cpp
$ git checkout -- hello.cpp
$ cat hello.cpp
#include<iostream>
using namespace std;
int main()
{
    cout<<"快使用"<<endl;
    return 0;
}

先清空暂存区,然后再使用git checkout – 文件名,用版本去来替换工作区,相当于case 1.;

git的删除与恢复操作

在工作区,我们可以直接rm命令手动删除一个文件,但是这样在版本库里面并没有变化。所以我们如果想在版本库里面删除这个文件。可以不用手动删除,直接用git rm 文件名

然后git commit -m ” 删除。。。”来提交到版本库;但是如果出现勿删还是可以恢复的

case 1.手动删除没有提交到暂存区,使用git checkout – 文件名,用版本区文件覆盖工作区

case 2.使用git rm删除.还没有提交


$ ls
hehe  hello.cpp  readme.txt
$ git rm hello.cpp
rm ‘hello.cpp‘
$ ls
hehe  readme.txt
t$ git status
位于分支 master
要提交的变更:
  (使用 "git reset HEAD <file>..." 撤出暂存区)

    删除:     hello.cpp

$ git checkout HEAD hello.cpp
$ ls
hehe  hello.cpp  readme.txt
$ git status
位于分支 master
无文件要提交,干净的工作区

当然也可以使用git checkout 的第二种方法

case 3. 提交删除,可以使用版本回退的方法来恢复文件,键上面git命令表格里的git reset

时间: 2024-10-08 11:17:55

git命令使用心得的相关文章

Android 深度探索(卷1)HAL 与驱动开发 第三章 GIT 使用入门 心得体会

Android 深度探索(卷1)HAL 与驱动开发 第三章 GIT 使用入门 心得体会 本章主要介绍GIT的学习,以及介绍GIT用于获取诸多开源项目的源代码. 在使用GIT之前我们首先对其安装,其安装命令: #apt-get  install git #apt-get  install git-doc git-svn git-gui gitk 在Linux 下可以直接使用man命令查看指定命令的帮助文档.这对我们初学者提供了很大的帮助. Git的功能很复杂,为此这章节举例为我们演示如何创建版本库

第三章 Git使用入门 心得体会

第三章 Git使用入门 心得体会     通过学习Android深度探索(卷1)HAL与驱动开发的第三章Git使用入门,首先我对Git有了一定了解git是一个版本控制系统.官方的解释是:版本控制(Revision control)是一种软件工程技巧.其次我掌握了Git的使用流程. 第一步:新建分支 首先,每次开发新功能,都应该新建一个单独的分支 # 获取主干最新代码 $ git checkout master $ git pull # 新建一个开发分支myfeature $ git checko

windows下git命令的使用

一.写在前面 关于git,出于自己的爱好,前段时间玩了一下,也自己上网查了一下资料,现简单记录一下,以备查看. 当然,本文并不是介绍配置git服务器的文章,而是以github服务器作为git的远程仓库服务器. 二.安装 windows下使用git,需要安装msysGit,下载地址是https://code.google.com/p/msysgit/downloads/list; 安装完成后,在安装目录下,有个msys.bat文件,这个就是msysGit提供的命令行客户端: 当然就像svn一样,也

常用 Git 命令清单

我每天使用 Git ,但是很多命令记不住. 一般来说,日常使用只要记住下图6个命令,就可以了.但是熟练使用,恐怕要记住60-100个命令. 下面是我整理的常用 Git 命令清单.几个专用名词的译名如下. Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库 一.新建代码库 # 在当前目录新建一个Git代码库 $ git init # 新建一个目录,将其初始化为Git代码库 $ git init [project-nam

Git命令执行漏洞

Git命令造成的反弹shell 漏洞描述: Git LFS可以.lfsconfig使用LFS由存储库中的文件配置(部分),并且可以将Git LFS指向ssh://. [lfs] url = ssh://-oProxyCommand= some-command 当使用这样的.lfsconfig文件克隆存储库时,使用LFS插件的Git将尝试调用ssh以从主机获取LFS对象 -oProxyCommand=some-command.然而,SSH会将该主机名解释为一个-o选项,并随后尝试调用some-co

git命令行使用

1. git命令行配置 1)安装完git客户端之后,在任意目录右键鼠标,选择Git GUI Here 2)在打开的窗口中依次选择Help->> Show SSH Key 2)如果弹出的窗口中中间部分没有key,可以点击 Generate Key 按钮,生成key,然后将生成的key拷贝一下,添加到gitlab中即可. 2. 命令使用 1)下载代码 在存放代码的目录中,右键鼠标,选择 Git Bash Here,然后会打开终端窗口 输入: git init   创建git配置目录 输入下面命令,

常用 Git 命令清单 转

我每天使用 Git ,但是很多命令记不住. 一般来说,日常使用只要记住下图6个命令,就可以了.但是熟练使用,恐怕要记住60-100个命令. 下面是我整理的常用 Git 命令清单.几个专用名词的译名如下. Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库 一.新建代码库 # 在当前目录新建一个Git代码库 $ git init # 新建一个目录,将其初始化为Git代码库 $ git init [project-nam

常用 Git 命令清单【转】

转自:http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html 作者: 阮一峰 日期: 2015年12月 9日 我每天使用 Git ,但是很多命令记不住. 一般来说,日常使用只要记住下图6个命令,就可以了.但是熟练使用,恐怕要记住60-100个命令. 下面是我整理的常用 Git 命令清单.几个专用名词的译名如下. Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:

git命令评测

近日得知git命令在库进行操作,查找git尽管小命令(当然,也不能太小),但他们是一个非常强大的组合,更重要的是,它是非常的效果不同状态的命令是不一样的打.该博文总结git命令.. Git命令 命令小结 命令 功能 git init 把当前目录初始化为默认的git库 git add 文件名称 向git库中加入一个文件 git rm 文件名称 从git库中删除一个文件 git status 查看当前库中进行的任务 git diff 文件名称 add前查看工作区和暂存区的区别 git commit