Git学习篇之Git基础

Git基础

1 获取Git仓库

第一种:把现有的目录或者项目导入Git中

第二种:从服务器上克隆现有的Git仓库

1.1 在现有目录中初始化现有仓库

进入项目目录输入:

$ git init

若进行版本控制,要开始进行追踪和初次提交:

$ git add *.c
$ git add LICENSE
$ git commit -m 'initial project version'

稍后解释这些命令的含义

1.2克隆现有仓库

克隆命令:

$ git clone https://github.com/libgit2/libgit2 mylibgit //mylibgit 是目标目录,可省

与其他的版本控制的‘checkout’命令不同,Git的‘clone’会对服务器仓库的几乎所有数据进行完整的复制,而不只是复制当前的工作目录

2 在Git仓库中记录变更

图1文件状态的生命周期

2.1 查看当前状态

主要工具:

$ git status

如果在克隆完仓库立即执行,则会显示如下信息:

$ git status
On branch master
nothing to commit, working directory clean

2.2 跟踪新文件

执行以下命令跟踪README文件:

$ git add README

2.3 暂存已修改文件

$ git add CONTRIBUTING.md

git add 命令既可以原来跟踪文件,也可以用来暂存文件,同时也可以做一些其他的事情。可以把它理解为‘添加内容到下一次提交’,而不是‘把这个文件加入到项目中’。

如果在执行git add 之后又对文件进行了修改,需要再一次执行git add命令。

2.4 显示更加简洁的状态信息

$ git status -s
或者
$ git status --short
M README
MM Rakefile
A lib/git.rb
M lib/simplegit.rb
?? LICENSE.txt

??:未跟踪的新文件

A:已暂存的新文件

M:已修改的文件

2.5 忽略文件

如果你想忽略一些自动生成的文件(例如日志文件),这样的情况下你可以创建一个名为.gitignore的文件,在其中列出待匹配文件模式,例如:

$ cat .gitignore
#告诉Git忽略所有以.a .o结尾的文件
*.[oa] 
#忽略所有以~结尾的文件
*~  

.gitignore 文件中匹配模式的规则如下:

  • 空行或以#开始的行会被忽略
  • 支持标准的glob模式
  • 以斜杠(/)开头的模式可用于禁止递归匹配
  • 以斜杠(/)结尾的模式表示目录
  • 以感叹号(!)开始的模式表示取反

2.6 查看已暂存和未暂存的变更

查看尚未添加到暂存区的变更:

$ git diff

查看已暂存的内容会进入下一次提交:

$ git diff --staged

如果你更喜欢图形化或外部的diff查看程序,那么还有另外一种方法可以用来浏览差异结构。执行 git difftool,这样就能在emerge、vimdiff等其他软件中查看差异。使用git difftool --tool -help可查看系统中的可用diff工具。

2.7 提交变更

最简单的提交方式就是:

$ git commit

直接在命令行上键入提交的信息:

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

2.8 跳过暂存区

$ git commit -a -m 'added new benchmarks'

2.9 移除文件

$ git rm PROJECTS.md

下次提交的时候这个文件就不存在了,也不会被git跟踪管理

如果你想把文件保留在工作目录,但是从暂存区移除该文件,只需要使用--cached选项即可:

$ git rm --cached README

2.10 移动文件

无论你是使用git的mv命令,还是直接给文件改名,Git都能推断出这是重命名的操作

$ git mv README.md README

3 查看提交历史

$ git log

git log 有很多不同的选项,可以直观的展示所需要的内容。

选项-p,还可以加上-2,最近两次提交所引入的差异:

$ git log -p -2

选项 --stat,可以查看每个提交的简要统计信息

$ git log --stat

另外一个颇为有用的选项是 --pretty,它可以更改日志输出的默认格式

$ git log --pretty==oneline

除了online之外,short、full、和fuller格式选项分别比默认输出减少或增加一些信息。最值得注意的选项是format,它允许你指定自己的输出格式 

$ git log --pretty=format:"%h - %an, %ar : %s"
表1 git log --pretty=format命令的一些有用的选项
格式选项 输出的格式描述
%H 提交对象的散列值
%h 提交对象的简短散列值
%T 树对象的散列值
%t 树对象的简短散列值
%P 父对象的散列值
%p 父对象的简短散列值
%an 作者的名字
%ae 作者的电子邮箱地址
%ad 创作日期(可使用-date=选项指定日期格式)
%ar 相对于当前日期的创作日期
%cn 提交者的名字

%ce

提交者的电子邮箱地址
%cd 提交日期
%cr 相当于当前日期的提交日期
%s 提交信息的主题

限制提交历史的输出范围

$ git log --since=2.weeks
表2 用于限制git log输出范围的选项
选项 描述
-(n) 只显示最新的n次提交
--since,--after 只输出指定日期之后的提交
--until,--before 只输出指定日期之前的提交
--auth 只输出作者与指定字符串匹配的提交
--committer 只输出提交者与指定字符匹配的提交
--grep 只输出提交信息包含指定字符串的提交
-S 只输出包含“添加或删除指定字符串”的更改的提交

4 撤销操作

4.1 撤销已暂存的文件

$ git reset HEAD filename

4.2 撤销对文件的修改

$ git checkout -- 文件名

这是一条很危险的命令,因为上述命令用之前的版本做了覆盖,除非你确信不需要这些文件,否则不要使用这个命令。

5 远程仓库的使用

5.1 显示远程仓库

$ git clone http://github.com/schacon/ticgit

5.2 添加远程仓库

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

现在你可以在命令行中使用pb字符代替完整的url。比如,要获取Paul拥有而你还没拥有的全部数据,可以执行下面命令:

$ git fetch pb

5.3 从远程仓库获取和拉取数据

$ git fecth [remote-name]

5.4 将数据推送到远程仓库

$ git push origin master

5.5 检查远程仓库

$ git remote show origin

5.6 删除和重命名远程仓库

#重命名
$ git remote rename pb paul
#删除
$ git remote rm paul

猜你喜欢

转载自blog.csdn.net/weixin_41551445/article/details/107652494