基础


目录:

  • working driectory  工作目录,就是我们的工作目录,其中包括未跟踪文件及暂存区和仓库目录。
  • staging area    暂存区,不对应一个具体目录,其实只是git directory中的一个特殊文件。
  • git directory          仓库目录,就是.git目录,里面保存了所有的版本信息等内容。

文件状态:

  • untracked 未跟踪  : 只有处于已跟踪状态的文件才被纳入GIT的版本控制.
  • modified 已修改:已修改表示修改了文件,但还没保存到暂存区中。
  • staged 已暂存 : 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
  • committed 已提交:表示数据已保存在仓库目录中。

基本的 Git 工作流程如下:

  • 在工作目录中修改文件。  
  • 暂存文件,将文件的快照放入暂存区域。
  • 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

示例


1,配置git

  • 配置提交的用户名,提交时注释的文本工具等,下面是对当前用户配置的命令

    $ git config --global user.name "John Doe"
    $ git config --global user.email johndoe@example.com
    $ git config --global core.editor emacs
    $ git config --global core.editor "'C:/Program Files/Sublime Text/sublime_text.exe' -w" ## windows下配置编辑器sublime()
    $ git config --list                                          ## 检查配置信息
    $ git config username                                        ## 检查git某一项配置

    /etc/gitconfig 对本机所有用户,~/.gitconfig 对当前用户 ,<project>/.git/config 对当前工程。

  • 配置 .gitignore 文件

  在项目的根目录下,与.git目录同级。

  GitHub 有一个十分详细的针对数十种项目及语言的 .gitignore 文件列表,你可以在 https://github.com/github/gitignore 找到它.

2,生成git仓库,有两个方式

在源码根目录

$ git init

克隆已有的仓库

$ git clone https://github.com/libgit2/libgit2 mylibgit

本例子克隆远程把仓库同时把仓库根目录命名为 mylibgit,命名这步是可选的。

3,在本地操作文件

将文件添加到暂存区,准备提交

$ git add README

将一个文件从git跟踪列表移除,如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f

$ git rm PROJECTS.md

 相关的还有: $ git rm --cached README  $ git rm log/\*.log  $ git rm \*~

重命名或移动文件

$ git mv README.md README

4,在本地提交

  -a 表示把所有修改过添加到已暂存中,-m 是提交的注释信息

$ git commit -a -m "Story 182: Fix benchmarks for speed"

5,查看历史记录

  以一行的形式显示

$ git log --pretty=oneline

6,撤消某些操作(amend,reset,checkout)

修改最近一个提交,包括提交的注释,提交的文件等一系列操作。注意此命令前的若干条命令都被视作对上一次commit的修改。

$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend

把一个文件重置,取消暂存态

$ git reset HEAD CONTRIBUTING.md

把一个文件恢复到上一次提交时的样子  

$ git checkout -- CONTRIBUTING.md

7,提交到远程服务器(remote,pull,push)

查看远程仓库

$ git remote -v

查看详细信息(origin)是仓库名,通常提交前应先看下。

$ git remote show origin

添加一个新的远程 Git 仓库,同时指定一个你可以轻松引用的别名 以后就可以把pb 当 https://github.com/paulboone/ticgit

$ git remote add pb https://github.com/paulboone/ticgit

从远程仓库中抓取你还没有的数据,它并不会自动合并或修改你当前的工作。

$ git fetch pb

运行 git pull 通常会从最初克隆的服务器上抓取数据并自动尝试合并到当前所在的分支。

$ git pull pb

把文件推到远程服务器, 只有当你有所克隆服务器的写入权限,并且之前没有人推送过时,这条命令才能生效,当你和其他人在同一时间克隆,

他们先推送到上游然后你再推送到上游,你的推送就会毫无疑问地被拒绝。

注意,push前一定要先pull

$ git push origin master

远程仓库的重命名,把pb改为paul

$ git remote rename pb paul

远程仓库的删除

$ git remote rm paul

删除远程的文件,有时误把项目编译的临时文件上传到远程,这时可以删除它们

git rm -rf bin/ gen/ 

之后执行git commit, git push 就可。

Git教程(3)git工作区与文件状态及简单示例的更多相关文章

  1. Git使用手册/Git教程:git fetch 将远程仓库的分支及分支最新版本代码拉取到本地

    相关文章: 关于验证是否存在ssh配置以及生成SSH Key的方法可以参照文章:Git使用手册:生成SSH Key 关于SSH Key的使用和公钥在gitHub.gitLab的配置等,请参考文章:Gi ...

  2. 掌握Git撤销操作,随心所欲控制文件状态

    本文主要讨论和撤销有关的 git 操作.目的是让读者在遇到关于撤销问题时能够方便迅速对照执行解决问题,而不用去翻阅参数繁多的 git 使用说明. 一开始你只需了解大致功能即可,不必记住所有命令和具体参 ...

  3. git 教程2 (git常用命令解说)

    <1>$ git -- help (调出git的帮助文档) <2>$ git +命令 --help (查看某个具体命令的帮助文档) <3>$ git --versi ...

  4. 廖老师git教程执行"git checkout -b dev origin/dev"命令报出:fatal: Cannot update paths and switch to branch 'dev' at the same time. Did you intend to checkout 'origin/dev' which can not be resolved as commit?问题解决

    在学习廖老师git教程之多人协作模块时按照老师的操作先创建了另一个目录,然后在这个目录下从GitHub上clone了 learngit目录到这个目录下,同样的执行了git branch查看分支情况,确 ...

  5. Spring MVC 文件上传简单示例(form、ajax方式 )

    1.Form Upload SpringMVC 中,文件的上传是通过 MultipartResolver 实现的,所以要实现上传,只要注册相应的 MultipartResolver 即可. Multi ...

  6. git教程2-删除修改和文件

    文件处于三种状态: 1.位于工作区,未修改状态: 2.位于工作区,已经修改状态: 3.位于暂存区,已经暂存但未commit. 4.已经commit. 一.文件删除修改: 1.已经修改,但未add: g ...

  7. git 教程(8)--删除文件

    在Git中,删除也是一个修改操作,我们实战一下,先添加一个新文件test.txt到Git并且提交:

  8. 【Git教程】Git教程及使用命令

      Git是目前世界上最先进的分布式版本控制系统,可以自动记录和管理文件的改动,还可以团队写作编辑,也就是帮助我们对不同的版本进行控制.2008年,GitHub网站上线,为开源项目提供免费存储,迅速发 ...

  9. 【Git教程】Git教程之分支管理

      在前一篇文章中,主要针对Git本地仓库和远程仓库的基本操作命令进行了简要介绍,本文主要集中介绍Git的另一个主要的特点:分支管理和多人协作. 什么是分支管理   当一个任务需要多人协作完成时,每个 ...

随机推荐

  1. JavaFX桌面应用开发-鼠标事件和键盘事件

    鼠标相关事件的操作初始代码 package application; import javafx.application.Application;import javafx.event.ActionE ...

  2. MySQL5.7本地首次登录win10报错修改

    1.打开MySQL目录下的my.ini文件,在文件的最后添加一行“skip-grant-tables”,保存并关闭文件.(Win10默认安装,my.ini在C:\ProgramData\MySQL\M ...

  3. linux获得网卡信息

    #define MAX_INTERFACE 64 int showifs() { int i; int rc; int sock; int ifnum; struct ifreq ifr[MAX_IN ...

  4. Flask-SQLAlchemy中解决1366报错

    会报下面这个1366的错 安装MySQL驱动(我升级过Python,所以要再装一遍) 本想安装MySQL官方驱动mysql-connector-python的,然而官方目前只支持到3.4 我又懒,所以 ...

  5. vue 使用插件

    上传加载 :vue-infinite-loading

  6. ACdream 1032 Component

    Component Time Limit: 5000ms Memory Limit: 64000KB This problem will be judged on ACdream. Original ...

  7. 2.1.5、SparkEnv中创建MapOutputTracker

    SparkEnv中创建MapOutputTracker def registerOrLookupEndpoint( name: String, endpointCreator: => RpcEn ...

  8. N天学习一个linux命令之du

    用途 统计文件或者目录占用硬盘空间大小 用法 du [OPTION] [FILE]du [OPTION] --files0-from=F 常用参数 -a, --all统计所有文件,不仅仅是目录 -b, ...

  9. SSH整合开发时Scope为默认时现象与原理

    1.前提知识 1)scope默认值 进行SSH整合开发时,Struts2的action须要用spring容器进行管理,仅仅要涉及到类以bean的形式入到spring容器中.无论是xml配置还是使用注解 ...

  10. 飘逸的python - 实现一个极简的优先队列

    一个队列至少满足2个方法,put和get. 借助最小堆来实现. 这里按"值越大优先级越高"的顺序. #coding=utf-8 from heapq import heappush ...