Git2:Git基本操作

目录

  • 一、git全局配置
  • 二、创建一个版本库
  • 三、git的常用操作
    • 1、版本提交与回退

      • 1.1、版本提交
      • 1.2、版本回退
    • 2、工作区、版本库与暂存区
      • 2.1、工作区
      • 2.2、版本库
    • 3、管理文件的修改
      • 3.1、修改文件
      • 3.2、撤销修改
    • 4、文件差异对比
      • 4.1、差异对比常用指令
      • 4.2、具体操作
    • 5、删除文件
      • 5.1、简单说明
      • 5.2、具体操作示例
    • 6、移动文件
    • 7、查看提交历史

一、git全局配置

一般在新的系统上,我们都需要先配置下自己的Git工作环境。配置工作只需进行一次,以后升级时还会沿用现在的配置。如果需要,你随时可以用相同的命令修改已有的配置:

git config --global user.name "Breeze Yan"    #配置全局用户名
git config --global user.email "[email protected]"  #配置全局用户邮箱

git config --unset --global user.name "Breeze Yan" #取消全局用户名配置
git config --unset --global user.email "[email protected]" 

git config --list    #查看git配置
git config user.name
git config user.email

二、创建一个版本库

#创建一个目录:
mkdir git_test

#在项目目录下执行如下操作完成初始化操作:
git init 

初始化完成以后,在项目目录下会出现一个.git的目录,所有git需要的数据和资源都存放在这个目录中

三、git的常用操作

在工作目录下面的所有文件都无外乎这两种状态:已跟踪或未跟踪。已跟踪的文件指的是已经被纳入版本控制管理的文件。已跟踪的文件,它们的状态可能是已修改,已暂存,或者未更新(未修改)。而未跟踪的文件,它们既没有上次更新的快照,也不在当前的暂存区域,通常情况下它们就是那些在工作目录下新创建的文件。

在对某些文件进行编辑之后,git将这些文件标记为已修改。我们会逐步把这些修改过的文件保存到暂存区域,直到最后一次一次性的提交所有这些位于暂存区域的文件,如此重复。所以使用Git时的文件状态变化周期如图所示

1、版本提交与回退

1.1、版本提交

在git_test目录下创建一个文件code.txt,内容如下:

this is the first line

通过如下命令提交一个版本:

[email protected]:~/git_test$ git add code.txt
[email protected]:~/git_test$ git commit -m ‘first commit‘
[master (根提交) d66bdc0] first commit
 1 file changed, 1 insertion(+)
 create mode 100644 code.txt

使用如下命令可以查看版本记录:

[email protected]:~/git_test$ git log
commit d66bdc0189d3663db2feed6193c00751b277e80d (HEAD -> master)
Author: yanwei <[email protected]>
Date:   Sun Jul 15 22:35:33 2018 +0800

    first commit

1.2、版本回退

再次提交一个版本:

# 在code.txt中再添加一行之后,内容如下:
[email protected]:~/git_test$ cat code.txt
this is the first line
this is the second line

# 再次提交:
[email protected]:~/git_test$ git add code.txt
[email protected]:~/git_test$ git commit -m ‘second commit‘
[master 227ecaa] second commit
 1 file changed, 1 insertion(+)

[email protected]:~/git_test$ git log
commit 227ecaa7a5aeca38d392662263f2704c66e1e64a (HEAD -> master)
Author: yanwei <[email protected]>
Date:   Sun Jul 15 22:43:49 2018 +0800

    second commit

commit d66bdc0189d3663db2feed6193c00751b277e80d
Author: yanwei <[email protected]>
Date:   Sun Jul 15 22:35:33 2018 +0800

    first commit

现在若想回退到上一个版本,可以使用如下命令:

[email protected]:~/git_test$ git reset --hard HEAD^
HEAD 现在位于 d66bdc0 first commit

[email protected]:~/git_test$ git log
commit d66bdc0189d3663db2feed6193c00751b277e80d (HEAD -> master)
Author: yanwei <[email protected]>
Date:   Sun Jul 15 22:35:33 2018 +0800

    first commit

[email protected]:~/git_test$ cat code.txt
this is the first line

其中HEAD表示当前最新版本,HEAD^表示当前版本的上一个版本,HEAD^^表示当前版本的上上个版本,也可以使用HEAD~1表示当前版本的前一个版本,HEAD~100表示当前版本的前100版本。

假如这个时候,又需要回到second commit版本,可以使用如下命令:

# 通过如下命令找到操作记录:
[email protected]:~/git_test$ git reflog
d66bdc0 (HEAD -> master) [email protected]{0}: reset: moving to HEAD^
227ecaa [email protected]{1}: commit: second commit
d66bdc0 (HEAD -> master) [email protected]{2}: commit (initial): first commit

# 回退到second commit:
[email protected]:~/git_test$ git reset --hard 227ecaa
HEAD 现在位于 227ecaa second commit

[email protected]:~/git_test$ git log
commit 227ecaa7a5aeca38d392662263f2704c66e1e64a (HEAD -> master)
Author: yanwei <[email protected]>
Date:   Sun Jul 15 22:43:49 2018 +0800

    second commit

commit d66bdc0189d3663db2feed6193c00751b277e80d
Author: yanwei <[email protected]>
Date:   Sun Jul 15 22:35:33 2018 +0800

    first commit

2、工作区、版本库与暂存区

2.1、工作区

我们操作文件的目录,如git_test,就是一个工作区

2.2、版本库

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

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

因为我们创建git版本库时,git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

可以简单理解为,需要提交的文件修改全部放到暂存区,然后,一次性提交暂存区的所有修改。

前面我们把文件往git版本库里添加的时候,是分两步执行的:

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

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

下面,我们在git_test目录下再创建一个文件code2.txt,内容如下:

[email protected]:~/git_test$ cat code2.txt
the code2 first line

然后再次编辑code.txt,在其中加入一行,编辑后内容如下:

[email protected]:~/git_test$ cat code.txt
this is the first line
this is the second line
this is the third line

使用git status查看当前工作树的状态:

[email protected]:~/git_test$ git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

    修改:     code.txt

未跟踪的文件:
  (使用 "git add <文件>..." 以包含要提交的内容)

    code2.txt

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

上面提示code.txt被修改,而code2.txt没有被跟踪。

我们将code.txt和code2.txt加入到暂存区,然后再次查看工作树状态:

[email protected]:~/git_test$ git add code.txt
[email protected]:~/git_test$ git add code2.txt
[email protected]:~/git_test$ git status
位于分支 master
要提交的变更:
  (使用 "git reset HEAD <文件>..." 以取消暂存)

    修改:     code.txt
    新文件:   code2.txt

然后,执行git commit就可以一次性把暂存区的所有修改提交到分支创建一个版本:

[email protected]:~/git_test$ git commit -m ‘third commit‘
[master e4fb2aa] third commit
 2 files changed, 2 insertions(+)
 create mode 100644 code2.txt
[email protected]:~/git_test$ git log
commit e4fb2aa04ca8aa3b6a32ef46a69fa5f97ae625fa (HEAD -> master)
Author: yanwei <[email protected]>
Date:   Sun Jul 15 23:16:56 2018 +0800

    third commit

commit 227ecaa7a5aeca38d392662263f2704c66e1e64a
Author: yanwei <[email protected]>
Date:   Sun Jul 15 22:43:49 2018 +0800

    second commit

commit d66bdc0189d3663db2feed6193c00751b277e80d
Author: yanwei <[email protected]>
Date:   Sun Jul 15 22:35:33 2018 +0800

    first commit

一旦提交后,在没有再次对工作区作修改之前,那么工作区就是“干净”的:

[email protected]:~/git_test$ git status
位于分支 master
无文件要提交,干净的工作区

现在版本库变成了如下模样:

3、管理文件的修改

3.1、修改文件

在code.txt中再次添加一行内容,修改后的内容如下:

[email protected]:~/git_test$ cat code.txt
this is the first line
this is the second line
this is the third line
this is the forth line

然后使用git add命令将其添加到暂存区

[email protected]:~/git_test$ git add code.txt
[email protected]:~/git_test$ git status
位于分支 master
要提交的变更:
  (使用 "git reset HEAD <文件>..." 以取消暂存)

    修改:     code.txt

再次修改该文件,添加一行内容,修改后的内容如下:

[email protected]:~/git_test$ cat code.txt
this is the first line
this is the second line
this is the third line
this is the forth line
this is the fifth line

通过git commit提交一个版本,并使用git status查看,发现第二次修改code.txt内容之后,并没有将其添加到暂存区,所以创建新版本的时候,并没有被提交:

[email protected]:~/git_test$ git status
位于分支 master
要提交的变更:
  (使用 "git reset HEAD <文件>..." 以取消暂存)

    修改:     code.txt

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

    修改:     code.txt

[email protected]:~/git_test$ git commit -m ‘forth commit‘
[master 0a96a0f] forth commit
 1 file changed, 1 insertion(+)
[email protected]:~/git_test$ git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

    修改:     code.txt

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

3.2、撤销修改

3.2.1、丢弃工作区的改动

可以使用git checkout -- <文件>来丢弃工作区的改动:

# 使用如下指令来撤销我们第二次的修改
[email protected]:~/git_test$ git checkout -- code.txt
[email protected]:~/git_test$ git status
位于分支 master
无文件要提交,干净的工作

# 再次查看code.txt文件,发现最后一次修改已被丢弃:
[email protected]:~/git_test$ cat code.txt
this is the first line
this is the second line
this is the third line
this is the forth line

3.2.2、撤销暂存区的修改

我们再次编辑code.txt,添加一行内容,并添加到暂存区:

[email protected]:~/git_test$ cat code.txt
this is the first line
this is the second line
this is the third line
this is the forth line
new line

[email protected]:~/git_test$ git add code.txt

[email protected]:~/git_test$ git status
位于分支 master
要提交的变更:
  (使用 "git reset HEAD <文件>..." 以取消暂存)

    修改:     code.txt

通过如下命令,将暂存区的修改撤销,重新放回工作区:

[email protected]:~/git_test$ git reset HEAD code.txt
重置后取消暂存的变更:
M   code.txt
[email protected]:~/git_test$ git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

    修改:     code.txt

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

最后可以通过上面的丢弃工作区的改动,来彻底放弃对文件的修改。

3.3.3、小结

  1. 当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
  2. 当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了上面那种情形,然后按照上面的情形操作
  3. 已经提交了不合适的修改到版本库时,想要撤销本次提交,可直接回退版本库

4、文件差异对比

4.1、差异对比常用指令

git diff    #查看工作目录中当前文件和暂存区域快照之间的差异
git diff --cached    #查看暂存文件与上次提交时的快照之间的差异,与git diff --staged相同
git diff HEAD    #查看在最后一次提交后所有变更
git diff v1.6 -- filename    #从一个特定点开始文件的修改情况
git diff v1.6 v1.7 --stat    #两次提交的差异比对
git diff master...branchname    #在合并某分支前查看变更内容
git diff --name-only v1.6 HEAD    #列出v1.6版本到当前最新版本的差异文件,只显示文件,不显示差异内容

4.2、具体操作

4.2.1、对比当前工作区与HEAD版本的修改差异

# 修改当前工作区的code.txt,内容如下:
[email protected]:~/git_test$ cat code.txt
this is the first line
this is the second line
this is the third line
this is the forth line
new line

# 差异对比
[email protected]:~/git_test$ git diff HEAD -- code.txt
diff --git a/code.txt b/code.txt
index 66f9219..9bc8cf3 100644
--- a/code.txt  # ---代表HEAD
+++ b/code.txt  # +++代表当前工作区的文件
@@ -2,3 +2,4 @@ this is the first line
 this is the second line
 this is the third line
 this is the forth line
+new line       # 代表当前工作区比HEAD多一行

4.2.1、对比两个版本之间的差异

# 先查看历史提交
[email protected]:~/git_test$ git reflog
0a96a0f (HEAD -> master) [email protected]{0}: commit: forth commit
e4fb2aa [email protected]{1}: commit: third commit
227ecaa [email protected]{2}: reset: moving to 227ecaa
d66bdc0 [email protected]{3}: reset: moving to HEAD^
227ecaa [email protected]{4}: commit: second commit
d66bdc0 [email protected]{5}: commit (initial): first commit

# 对比second commit与third commit之间的差异
[email protected]:~/git_test$ git diff 227ecaa e4fb2aa -- code.txt
diff --git a/code.txt b/code.txt
index 9899a76..01e1274 100644
--- a/code.txt
+++ b/code.txt
@@ -1,2 +1,3 @@
 this is the first line
 this is the second line
+this is the third line         # third commit比second commit多增加了一行内容

5、删除文件

5.1、简单说明

  1. 要从Git中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。可以用 git rm 命令完成此项工作,并连带从工作目录中删除指定的文件。
  2. 如果只是简单地从工作目录中手工删除文件,运行git status时就会在"Changed but not updated"部分。
  3. 如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f(译注:即 force 的首字母),以防误删除文件后丢失修改的内容。
  4. 如果只想删除暂存区中的文件,而不删除工作目录中的文件,可以使用git rm --cached

5.2、具体操作示例

[email protected]:~/git_test$ rm code2.txt 

[email protected]:~/git_test$ git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add/rm <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

    删除:     code2.txt

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

[email protected]:~/git_test$ git rm code2.txt
rm ‘code2.txt‘
[email protected]:~/git_test$ git status
位于分支 master
要提交的变更:
  (使用 "git reset HEAD <文件>..." 以取消暂存)

    删除:     code2.txt

6、移动文件

移动一个文件的命令为:git mv

想对git中的文件改名,可以执行

git mv file1 file2

其实运行git mv相当于运行了下面三条命令:

mv readme.txt readme
git rm readme.txt
git add readme

7、查看提交历史

git log     #按提交时间列出所有的更新,最近的更新排在最上面
    -p -2   #-p展开显示每次提交的内容差异,-2则仅显示最近的两次更新
    --stat    #仅显示简要的增改行数统计
    --online    # 一行显示一个版本
    --pretty=‘format‘    #定制要显示的记录格式
    format的常用选项如下:
        %H 提交对象(commit)的完整哈希字串
        %h 提交对象的简短哈希字串
        %T 树对象(tree)的完整哈希字串
        %t 树对象的简短哈希字串
        %P 父对象(parent)的完整哈希字串
        %p 父对象的简短哈希字串
        %an 作者(author)的名字
        %ae 作者的电子邮件地址
        %ad 作者修订日期(可以用 -date= 选项定制格式)
        %ar 作者修订日期,按多久以前的方式显示
        %cn 提交者(committer)的名字
        %ce 提交者的电子邮件地址
        %cd 提交日期
        %cr 提交日期,按多久以前的方式显示
        %s 提交说明
    需要说明的是,作者指的是实际作出修改的人,提交者为最后一次将些文件提交到的人。
    示例:
        git log --pretty=format:"%H - %an, %ar : %s"
        git log --oneline

    --shortstat 只显示 --stat 中最后的行数修改添加移除统计。
    --name-only 仅在提交信息后显示已修改的文件清单。
    --name-status 显示新增、修改、删除的文件清单。
    --before="2 weeks ago" --after="2012-10-29" --pretty=oneline    #日期区间

原文地址:https://www.cnblogs.com/breezey/p/9320786.html

时间: 2024-10-27 21:47:26

Git2:Git基本操作的相关文章

git 基本操作

windows安装: 安装好后,随便点击一个文件夹,就会有git bash的右键选项.... 这个是cmd方式 还有git gui方式... git clone 从某个分支上copy一份到本地. git init 初始化—— 主要是生成.gitignore文件等,表明此目录是git专用 git add .    //将改动的地方添加到版本管理器 —— . 表示当前目录 git  commit -m "some changes"  //提交到本地的版本控制库里,引号里面是你对本次提交的说

Git基本操作用法

Git基本操作用法 1.初始化操作 2.创建新版本库 3.修改和提交 4.撤消操作 5.查看提交历史 1.初始化操作 $ git config -global user.name <name> #设置提交者名字 $ git config -global user.email <email> #设置提交者邮箱 $ git config -global core.editor <editor> #设置默认文本编辑器 $ git config -global merge.to

git基本操作简介

摘要:最近学习git基本操作,简要做一个常用操作总结. 1,git init 这个命令可以把一个普通的文件夹(目录),变成一个git可以管理的仓库: 2,vi read.txt该命令行或者直接在当前目录下创建一个.txt文件(别的格式也是可以的): 3,git clone [email protected]:sllhappy/hello-world.git如果想把github上别人的项目保存到本地可以使用这个命令行克隆别的项目到本地: 4,git add read.txt/git add .把修

Git-Runoob:Git 基本操作

ylbtech-Git-Runoob:Git 基本操作 1.返回顶部 1. Git 基本操作 Git 的工作就是创建和保存你项目的快照及与之后的快照进行对比.本章将对有关创建与提交你的项目快照的命令作介绍. 获取与创建项目命令 git init 用 git init 在目录中创建新的 Git 仓库. 你可以在任何时候.任何目录中这么做,完全是本地化的. 在目录中执行 git init,就可以创建一个 Git 仓库了.比如我们创建 runoob 项目: $ mkdir runoob $ cd ru

git基本操作及上传代码到gitHub

1.基本配置: 配置用户名:git config --global user.name" "; 配置邮箱:git config --global user.email " "; 查看配置:git config --list 2.基本操作: 创建仓库:进入一个目录下面执行 git init 使用当前面目录作为git仓库: git add filename 修改文件,添加一行" aaaa" git commit -m ''   //只是提交到暂存区,

Git基本操作和使用

基本命令: git config git init git clone git remote git fetch git commit git rebase git push 本地基本操作: git clone url    导入到本地 git remote -v   查看源地址 git status   查看改动文件 git commit -am '备注'    提交源码 git push origin master:master  确认提交 git fetch 更新 git rebase o

git基本操作

一.分支操作 git init 初始化仓库 git status 查看仓库变化 git add 从工作树提交到暂存区 git commit 从暂存区提交到本地仓库 git commit --amend 修改上条记录的备注 git commit -am 'comment' 提交到暂存区和本地仓库 git diff 工作树和暂存区插播 git diff HEAD 工作树和最本地仓库的差别 git checkout -- filename 撤销工作需修改(修改.删除) git log [filenam

Git基本操作(win7下)

在项目目录下打开Git Bash 1.配置身份命令: git config --global user.name "Tendoasan" git config --global user.email "[email protected]" 2.创建代码仓库(Repository) 在项目的目录下面,输入: git init 之后会在根目录下生成一个隐藏的.git文件夹 3.提交本地代码 添加想要提交的代码(分别为添加某文件,添加某目录下所有文件,添加所有文件): g

4、Git基本操作

1.版本回退 $ git status 命令可以让我们时刻掌握仓库当前的状态$ git status命令可以让我们时刻掌握仓库当前的状态$ git log命令显示从最近到最远的提交日志,如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数: $ git log --pretty=oneline Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是