`

git实战-常用命令详细讲解

    博客分类:
  • git
 
阅读更多

初始化和建立项目

有两种方式,一种是 init, 另外一种是 clone

init 在上面的例子中已经用过了,也就是进入项目所在的目录,用 $ git init 即可。

Clone 一般是 从远程服务器克隆一个已有的版本仓库 到本机,命令如下:

$ git clone git://github.com/git/hello-world.git

Cloning into 'hello-world'...

remote: Counting objects: 158, done.

remote: Compressing objects: 100% (79/79), done.

remote: Total 158 (delta 54), reused 154 (delta 54)

Receiving objects: 100% (158/158), 15.63 KiB, done.

Resolving deltas: 100% (54/54), done.

error: unable to create file brainf*ck.bf (Invalid argument)

查看远程服务器:

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git remote

origin

 

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git remote -v

origin  git://github.com/git/hello-world.git (fetch)

origin  git://github.com/git/hello-world.git (push)

添加与提交

所用到的命令是 add commit status.

1.         创建一个名为 helloworld.naxsu 的文件 .

2.         git status 查看当前目录文件的提交状态

brainf*ck.bf 是刚才克隆的时候,没法克隆下来,这里显示是删除了

helloworld.naxsu 是刚创建的文件,提示用 "git add" 添加的缓冲区中或者用 "git commit -a" 添加并提交

3.         $ git add helloworld.naxsu 进行添加到缓冲区

         添加当前目录下的所有文件

         $ git add .

         添加以 .c 为后缀的文件

         $ git add *.c

         添加指定文件

         $ git add index.jsp

4.         $ git commit helloworld.naxsu -m "init helloworld.naxsu" 提交到本地仓库

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ echo "hello world" >> helloworld.naxsu

 

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ ls *.naxsu

helloworld.naxsu

 

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git status

# On branch master

# Changes not staged for commit:

#   (use "git add/rm ..." to update what will be committed)

#   (use "git checkout -- ..." to discard changes in working directory)

#

#       deleted:    brainf*ck.bf

#

# Untracked files:

#   (use "git add ..." to include in what will be committed)

#

#       helloworld.naxsu

no changes added to commit (use "git add" and/or "git commit -a")

 

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git add helloworld.naxsu

warning: LF will be replaced by CRLF in helloworld.naxsu.

The file will have its original line endings in your working directory.

 

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git status

# On branch master

# Changes to be committed:

#   (use "git reset HEAD ..." to unstage)

#

#       new file:   helloworld.naxsu

#

# Changes not staged for commit:

#   (use "git add/rm ..." to update what will be committed)

#   (use "git checkout -- ..." to discard changes in working directory)

#

#       deleted:    brainf*ck.bf

#

 

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git commit helloworld.naxsu -m "init helloworld.naxsu"

warning: LF will be replaced by CRLF in helloworld.naxsu.

The file will have its original line endings in your working directory.

[master 8c17395] init helloworld.naxsu

warning: LF will be replaced by CRLF in helloworld.naxsu.

The file will have its original line endings in your working directory.

 1 file changed, 1 insertion(+)

 create mode 100644 helloworld.naxsu

 

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git status

# On branch master

# Your branch is ahead of 'origin/master' by 1 commit.

#

# Changes not staged for commit:

#   (use "git add/rm ..." to update what will be committed)

#   (use "git checkout -- ..." to discard changes in working directory)

#

#       deleted:    brainf*ck.bf

#

no changes added to commit (use "git add" and/or "git commit -a")

 

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$

忽略某些文件

Java 文件编译成 .class 文件,他是自动生成的,我们没必要用版本控制它,所以提交的时候可以用忽略。

创建文件 class1.class java1.java ,创建 .gitignore ,并把 class1.class 添加到 .gitignore , 同时用 vim 编辑 .gitignore ,把他自己也添加到里面,用 $ cat .gitignore 命令可以查看 .gitignore 的内容。接下来用 add,commit, 你就会发现 class1.class 是不会提交到仓库中的。

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ echo "class1" > class1.class

 

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ echo "java1" > java1.java

 

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ echo "class1.class" >.gitignore

 

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ vim .gitignore

 

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ cat .gitignore

class1.class

.gitignore

 

$ git status

$ git add .

$ git status

$ git commit -a -m "ignore test"

……

比较文件的不同

$ git diff( 默认是 $ git diff --staged)

$ git diff --staged: 比较 workspace VS staged

$ git diff --cached: 比较 staged VS local repo

演示思路:修改 helloworld.naxsu ,用 git diff 查看不同,把他 add 之后再查看他们的不同,然后 commit 后,又一次查看他们的不同。

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ vim helloworld.naxsu

 

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git diff

diff --git a/helloworld.naxsu b/helloworld.naxsu

index 3b18e51..6d05489 100644

--- a/helloworld.naxsu

+++ b/helloworld.naxsu

@@ -1 +1,2 @@

 hello world

+add something

warning: LF will be replaced by CRLF in helloworld.naxsu.

The file will have its original line endings in your working directory.

 

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git add helloworld.naxsu

warning: LF will be replaced by CRLF in helloworld.naxsu.

The file will have its original line endings in your working directory.

 

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git diff --cached

diff --git a/helloworld.naxsu b/helloworld.naxsu

index 3b18e51..6d05489 100644

--- a/helloworld.naxsu

+++ b/helloworld.naxsu

@@ -1 +1,2 @@

 hello world

+add something

warning: LF will be replaced by CRLF in helloworld.naxsu.

The file will have its original line endings in your working directory.

 

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git commit helloworld.naxsu -m "modified helloworld.naxsu"

warning: LF will be replaced by CRLF in helloworld.naxsu.

The file will have its original line endings in your working directory.

[master warning: LF will be replaced by CRLF in helloworld.naxsu.

The file will have its original line endings in your working directory.

6e7814d] modified helloworld.naxsu

warning: LF will be replaced by CRLF in helloworld.naxsu.

The file will have its original line endings in your working directory.

 1 file changed, 1 insertion(+)

 

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git diff

 

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git diff --cached

文件的移动和删除

移动 = 删除 + 添加

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ ls *naxsu

helloworld.naxsu  test.naxsu

 

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git rm test.naxsu

rm 'test.naxsu'

 

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git status

# On branch master

# Your branch is ahead of 'origin/master' by 6 commits.

#

# Changes to be committed:

#   (use "git reset HEAD ..." to unstage)

#

#       deleted:    test.naxsu

#

 

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git reset head test.naxsu

Unstaged changes after reset:

D       test.naxsu

 

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git status

# On branch master

# Your branch is ahead of 'origin/master' by 6 commits.

#

# Changes not staged for commit:

#   (use "git add/rm ..." to update what will be committed)

#   (use "git checkout -- ..." to discard changes in working directory)

#

#       deleted:    test.naxsu

#

no changes added to commit (use "git add" and/or "git commit -a")

如果没提交还可以 checkout 进行恢复

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git checkout -- test.naxsu

 

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ ls *.naxsu

helloworld.naxsu  test.naxsu

如果 commit 了之后,就不能 checkout

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git rm test.naxsu

rm 'test.naxsu'

 

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git commit -a -m "delete test.naxsu"

[master 46d28af] delete test.naxsu

 1 file changed, 1 deletion(-)

 delete mode 100644 test.naxsu

 

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git checkout -- test.naxsu

error: pathspec 'test.naxsu' did not match any file(s) known to git.

移动用 mv 命令,具体参考 $ git mv --help

查看操作记录

git log 显示所有的提交( commit )记录

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git log

commit 46d28afa27a90678c7391fc0bc5549db345f3c7d

Author: yineng huang

Date:   Fri Aug 17 23:28:34 2012 +0800

 

delete test.naxsu

……

git whatchanged

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git whatchanged

commit 46d28afa27a90678c7391fc0bc5549db345f3c7d

Author: yineng huang

Date:   Fri Aug 17 23:28:34 2012 +0800

 

    delete test.naxsu

 

:100644 000000 77608b6... 0000000... D  test.naxsu

……

git-whatchanged 显示的信息比 git-log 更详细一些,可以显示具体的文件名。

本文链接: http://www.656463.com/portal.php?mod=view&aid=7 0 ,转载请注明出处

下一节: 共享及更新项目

分享到:
评论

相关推荐

    Git基础知识及面试题

    前者可能深入讲解Git的内部原理和高级特性,后者则提供了实战性的题目,帮助巩固和检验Git命令的掌握程度。 总之,Git是Java开发工程师必备的工具之一,理解和熟练使用Git不仅能够提升个人工作效率,也是衡量开发者...

    2019_Git实战教程: 以工作常用命令为核心快速掌握Git

    《2019 Git实战教程:以工作常用命令为核心快速掌握Git》是一门精心设计的课程,旨在帮助学习者在不被复杂术语困扰的情况下,快速掌握Git这一强大的版本控制系统。Git是当前软件开发中不可或缺的工具,尤其在云计算/...

    Git权威指南高清版PDF

    《Git权威指南》这本书详细讲解了这些概念和命令,不仅有理论知识,还有丰富的实战案例。通过阅读这本书,读者可以学会如何高效地使用Git进行版本控制,理解其工作原理,并掌握协作开发的最佳实践。 除了基础操作,...

    Git实战体验

    Git实战体验:深入理解与应用 Git是一款分布式版本控制系统,由Linus Torvalds为Linux内核开发,自2005年发布以来,已成为软件开发领域中最常用的版本管理工具。Git的强大之处在于其分布式特性,它允许开发者在本地...

    Git权威指南.pdf

    2. **基本命令**:详细介绍如`git clone`用于克隆仓库、`git add`用于添加文件到暂存区、`git commit`用于提交更改等常用命令。 3. **分支管理**:解释如何创建、合并和删除分支,以及如何解决冲突。 4. **远程仓库...

    git-tutorials

    接下来,我们深入到Git的常用命令。`git init`用于初始化一个新的Git仓库;`git clone`用来复制远程仓库到本地;`git add`将更改添加到暂存区,准备进行提交;`git commit`将暂存区的更改保存为一个新的提交;`git ...

    python入门到高级全栈工程师培训 第3期 附课件代码

    03 Form组件之常用标签示例 04 Form组件之动态绑定数据 第60章 Django序列化共6课 第61章 01 上节内容回顾 02 上传文件 03 制作上传按钮 04 Form组件上传文件 05 上传相关内容梳理 06 Model操作知识提问 07 ...

    【PDF版本】老男孩教育Linux高端运维及云计算架构师-就业班20170513V9.pdf

    - **命令及特殊字符知识考试题讲解**:通过练习加深对Linux常用命令及特殊字符的理解。 - **Linux基础优化**:掌握基本的系统优化方法。 - **Linux目录结构知识精讲**:理解Linux文件系统的组织结构。 - **文件属性...

    Java Web典型模块与项目实战大全源代码10-12

    学习基本的Git命令和工作流程对团队协作至关重要。 通过这些模块的学习和实战项目实践,开发者能够深入理解Java Web开发的全貌,掌握核心技术和最佳实践,从而提高自身在该领域的专业素养。常建功老师的教程以其...

    Python项目开发实战

    理解Git的基本命令,如commit、push、pull、merge等,能够帮助团队协作,保持代码的同步和历史记录。 最后,项目部署和运维是项目上线前的关键步骤。了解如何配置服务器环境,使用虚拟环境管理依赖,以及使用Wsgi...

    Html、CSS、GIt、Linux、nodejs、JavaScript、Vue、MySQL等学习笔记.zip

    Linux笔记可能涉及常用命令,文件权限,服务配置等。Node.js部分可能讲解了事件驱动编程,Express框架,以及与数据库的交互。JavaScript和Vue.js的学习笔记可能包含函数、对象、组件、路由等内容,而MySQL部分可能...

    Java Web开发实战经典.rar

    《Java Web开发实战经典》这本书很可能包含了以上所有或大部分知识点的详细讲解,通过阅读并实践书中的例子,初学者能够全面了解并掌握Java Web开发的核心技能。无论你是希望成为一名全栈工程师,还是专注于前端或...

    Learn Android Studio- Build Android Apps Quickly and Effectively

    - 调试的基本概念和常用命令。 - 断点设置、变量查看等功能详解。 - 日志输出(LogCat)与错误日志分析技巧。 - **第十三章:Gradle构建系统** - Gradle的工作原理及其优势。 - 构建脚本(build.gradle文件)...

    完整版数据挖掘数据分析课程SPSS软件实习实训实战教材教程 第03章_程序编辑窗口用法详解.rar

    3. **常用命令及应用**:教程将涵盖一系列常用命令,如`ANALYSIS`(进行各种统计分析)、`IF`(条件语句)、`DO REPEAT`(循环结构)等,这些命令使得复杂的数据处理变得简单。 4. **宏和函数**:SPSS支持宏和函数...

    猪哥的嵌入式linux公房菜

    - **常用命令**:比较不同VCS的命令语法。 **15. 利用vmmaretools来实现共享的具体操作** - **安装步骤**:安装vmware tools。 - **配置方法**:设置共享文件夹。 **16. 献给初学者的10个Git技巧** - **基本操作**...

    Linux程序设计(第3版) PDF

    - Linux命令行基础及常用命令介绍。 2. **C语言编程** - C语言基础知识回顾。 - 在Linux环境下编写、编译和调试C程序。 - 文件操作、进程管理等高级C编程技术。 - 使用gdb等工具进行程序调试的方法。 3. **...

    PostgreSQL 性能优化培训 3 DAY

    通过一系列理论讲解和实战练习,使学员能够有效地识别和解决在实际工作中遇到的各种性能瓶颈问题。 #### 二、授课环境配置 - **操作系统**: CentOS 6.x (64位) - **数据库版本**: PostgreSQL 9.3.4 - **辅助工具**:...

    WebRTC零基础开发者教程(带目录版本)

    - `git cl`: 用于代码审查和提交。 - `gn` 和 `ninja`: 用于构建项目。 **1.2 Gyp工具** - **简介**:Gyp是一个用于生成构建文件的工具,可以将项目描述文件转换为不同构建系统的格式。 - **功能**:支持多种...

Global site tag (gtag.js) - Google Analytics