Git Pro - (1) 基础

近乎所有操作都可本地执行

在Git中的绝大多数操作都只需要访问本地文件和资源,不用连网。

三种状态

对于任何一个文件,在 Git 内都只有三 种状态:已提交(committed),已修改(modified)和已暂存(staged)。

已提交表示该 文件已经被安全地保存在本地数据库中了;已修改表示修改了某个文件,但还没有提交保 存;已暂存表示把已修改的文件放在下次提交时要保存的清单中。

             

取得项目的Git仓库

从当前目录初始化

git init

初始化后,在当前目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都 存放在这个目录中。

从现有仓库克隆

git clone git://github.com/schacon/grit.git

这会在当前目录下创建一个名为 “grit” 的目录,其中内含一个 .git 的目录,并从同 步后的仓库中拉出所有的数据,取出最新版本的文件拷贝。如果希望在克隆 的时候,自己定义要新建的项目目录名称,可以在上面的命令最后指定。

记录每次更新到仓库

检查当前文件状态

git status

跟踪新文件

git add README

暂存已修改文件

git add README

这是个多功能命令,根据目标文件的状态不同,此命令的效果也不同:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等。

现在的暂存区域已经准备妥当可以提交了。在此之前,请一定要确认还有什么修改过的 或新建的文件还没有git add 过,否则提交的时候不会记录这些还没暂存起来的变化。所以,每次准备提交前,先用git status 看下,是不是都已暂存起来了。

提交更新

git commit

提交时记录的是放在暂存区域的快照,任何还未暂存的仍然保持已修改状态,可以在下次提交时纳入版本管理。每一次运行提交操作,都是对你项目作一次快照,以后可以回到这个状态,或者进行比较。

尽管使用暂存区域的方式可以精心准备要提交的细节,但有时候这么做略显繁琐。Git 提 供了一个跳过使用暂存区域的方式,只要在提交的时候,给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤。

移除文件

git rm README

要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区 域移除),然后提交。可以用 git rm 命令完成此项工作,并连带从工作目录中删除指定的 文件,这样以后就不会出现在未跟踪文件清单中了。

如果删除之前修改过并且已经放到暂存 区域的话,则必须要用强制删除选项 -f。

另外一种情况是,我们想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希 望保留在当前工作目录中。换句话说,仅是从跟踪清单中删除,用 --cached 选项即可。

git rm --cached README

移动文件

git mv file_from file_to

在 Git 中对文件改名时可以这么用。

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

$ mv README.txt README

$ git rm README.txt

$ git add README

查看历史

git log

撤消操作

修改最后一次提交

git commit --amend

此命令将使用当前的暂存区域快照提交。如果刚才提交完没有作任何改动,直接运行此命令的话,相当于有机会重新编辑提交说明,而所提交的文件快照和之前的一样。

如果刚才提交时忘了暂存某些修改,可以先补上暂存操作,然后再运行 --amend 提交:

$ git commit -m ‘initial commit‘

$ git add forgotten_file

$ git commit --amend

上面的三条命令最终得到一个提交,第二个提交命令修正了第一个的提交内容。

取消已经暂存的文件

git reset HEAD <file>

文件又回到了之前已修改未暂存的状态。

取消对文件的修改

git checkout -- <file>

这条命令有些危险, 所有对文件的修改都没有了,因为我们刚刚把之前版本的文件复制过来重写了此文件。所以 在用这条命令前,请务必确定真的不再需要保留刚才的修改。

任何已经提交到 Git 的都可以被恢复。即便在已经删除的分支中的提交,或者用 --amend 重新改写的提交,都可以被恢复。所以,你可能失去的数据,仅限于没有提交过的,对Git 来说它们就像从未存在过一样。

远程仓库的使用

查看当前的远程库

git remote

它会列出每个远程库的简短 名字。在克隆完某个项目后,至少可以看到一个名为 origin 的远程库,Git 默认使用这个 名字来标识你所克隆的原始仓库。也可以加上 -v 选项,显示对应的克隆地址。

添加远程仓库

git remote add [shortname] [url]

例如:

$ git remote
origin
$ git remote add pb git://github.com/paulboone/ticgit.git $ git remote -v

origin git://github.com/schacon/ticgit.git

pb git://github.com/paulboone/ticgit.git

从远程仓库抓取数据

git fetch [remote-name]

此命令会到远程仓库中拉取所有你本地仓库中还没有的数据。运行完成后,你就可以在本地访问该远程仓库中的所有分支,将其中某个分支合并到本地,或者只是取出某个分支,一探究竟。

如果是克隆了一个仓库,此命令会自动将远程仓库归于 origin 名下。所以,git fetch origin 会抓取从你上次克隆以来别人上传到此远程仓库中的所有更新(或是上次 fetch 以 来别人提交的更新)。有一点很重要,需要记住,fetch 命令只是将远端的数据拉到本地仓 库,并不自动合并到当前工作分支,只有当你确实准备好了,才能手工合并。

如果设置了某个分支用于跟踪某个远端仓库的分支,可以使 用 git pull 命令自动抓取数据下来,然后将远端分支自动合并到本地仓库中当前分支。在 日常工作中我们经常这么用,既快且好。实际上,默认情况下 git clone 命令本质上就是 自动创建了本地的 master 分支用于跟踪远程仓库中的 master 分支(假设远程仓库确实有 master 分支)。所以一般我们运行 git pull,目的都是要从原始克隆的远端仓库中抓取数 据后,合并到工作目录中当前分支。

推送数据到远程仓库

git push [remote-name] [branch-name]

只有在所克隆的服务器上有写权限,或者同一时刻没有其他人在推数据,这条命令才会如期完成任务。如果在你推数据前,已经有其他人推送了若干更新,那你的推送操作就会被驳回。你必须先把他们的更新抓取到本地,并到自己的项目中,然后才可以再次推送。

查看远程仓库信息

git remote show [remote-name]

除了对应的克隆地址外,它还给出了许多额外的信息。它友善地告诉你如果是在 master 分支,就可以用 git pull 命令抓取数据合并到本地。另外还列出了所有处于跟踪状态中的 远端分支。它还会告诉我们,运行 git push 时缺省推送的分支是什么。

远程仓库的删除和重命名

git remote rename

git remote rm

时间: 2024-10-12 22:24:34

Git Pro - (1) 基础的相关文章

Git操作(基础篇)

Git操作(基础篇) Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.Git的读音为/g?t/.Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理.Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件. Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上.怎么分布呢?最早,肯定只有一台机器有一个原始版本库,此后,别的机器可以"克隆"这个原始版

【git体验】git原理及基础

原理:分布式版本控制系统像 Git,Mercurial,Bazaar 以及 Darcs 等,客户端并不只提取最新版本 的文件快照,而是把原始的代码仓库完整地镜像下来.这么一来,任何一处协同工作用的服务器发生故障, 事后都可以用任何一个镜 像出来的本地仓库恢复.因为每一次的提取操作,实际上都是一次对代码仓库的 完整备份. 更进一步,许多这类系统都可以指定和若干不同的远端代码仓库进行交互.籍此,你就可以在同一个 项目中,分别和不同工作小组的人相互协作.你可以根据需要设定不同的协作流程,比如层次模型式

git(学习之一)基础概念

Git学习笔记 ##################################################### qq:1218761836 qq群:150181442 ##################################################### 目录 Git. 1 一.关于版本控制... 1 二.本地版本控制系统... 1 三.集中式版本控制系统... 2 四.分布式版本管理控制系统... 3 五.Git的历史... 3 六.Git工作原理... 4 七

Git Pro深入浅出(二)

了解和熟悉下面的Git工具,会使你毫无压力地在命令行中使用Git来完成日常中的大部分事情. 六.Git工具 1. 选择修订版本 Git允许通过几种方法来指明特定的或者一定范围内的提交. git show <commitid> git show <简短的SHA-1> SHA-1 的前几个字符就可以获得对应的那次提交,当然你提供的 SHA-1 字符数量不得少于4个,并且没有歧义--也就是说,当前仓库中只有一个对象以这段 SHA-1 开头. # --abbrev-commit显示简短且唯

Git Pro深入浅出(一)

强力推荐使用命令行(Mac:Terminal:Windows:Command Prompt或PowerShell)!!!因为,只有在命令行模式下你才能执行Git的所有命令,而大多数的GUI软件只实现了Git所有功能的一个子集以降低操作难度.如果你学会了在命令行下如何操作,那么你在操作GUI软件时应该也不会遇到什么困难,但是,反之则不成立. Git是什么?为什么使用Git?如何使用Git? 一.版本控制 什么是"版本控制"?版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修

GIT常用的基础命令

1.起步 用户信息 配置你个人的用户名称和电子邮件地址.这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录: $ git config --global user.name "youname" $ git config --global user.email "[email protected]" 如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个(见图1),以后你所有的

Git Pro - (2)分支

Git 保存的不是文件差异或者变化量,而只是一系列文件快照. 在 Git中提交时,会保存一个提交(commit)对象,它包含一个指向暂存内容快照的指针,作者和相关附属信息,以及一定数量(也可能没有)指向该提交对象直接祖先的指针.当使用 git commit 新建一个提交对象前,Git 会先计算每一个子目录(本例中就是项目根目录)的校验和,然后在 Git 仓库中将这些目录保存为树(tree)对象.之后 Git 创建的提交对象,除了包含相关提交信息以外,还包含着指向这个树对象(项目根目录)的指针,如

git 学习之基础知识

在前面的一个帖子中我们知道了不同的版本控制系统的不同,在这个帖子中我们会大致的了解到它们是管理各个版本的,这对我们学习 git 是很有帮助的. 对于集中式的版本控制系统来说每次的更新主要记录内容的具体差异,每次都会哪些文件做了修改,以及记录修改的内容. 对于 Git 来说主要记录文件数据的整体.就好像把变化后的文件做一个快照,并且记录下来.对于每次提交都会遍历所有的文件并且对文件做一个快照,然后保存着指向这个快照的索引.当然如果文件没有修改,Git 就不会再次的进行保存.而是对上次的快照做一个链

git入门(2.基础)

必须要了解GIT的原理,才能知道每个操作的意义是什么,才能更容易地理解在什么情况下用什么操作,而不是死记命令.当然,第一步是要获得一个GIT仓库. 一.获得GIT仓库 有两种获得GIT仓库的方法,一是在需要用GIT管理的项目的根目录执行: git init 执行后可以看到,仅仅在项目目录多出了一个.git目录,关于版本等的所有信息都在这个目录里面. 另一种方式是克隆远程目录,由于是将远程服务器上的仓库完全镜像一份至本地,而不是取某一个特定版本,所以用clone而不是checkout: git c