欢迎来到吴小小的专栏!

git使用教程之git基础

1 获取Git仓库

  1. 在现有目录中初始化仓库
git init
  1. 克隆现有的仓库
git clone https://github.com/yangwang12345/node_test.git
git clone -b 分知名 路径 //切换到其他远程分支

Git 支持多种数据传输协议
https:// 协议
git:// 协议
SSH 传输协议 : user@server:path/to/repo.git

2 记录每次更新到仓库


每一个文件都不外乎这两种状态:已跟踪(tracked)或未跟踪(untracked)
初始化一个仓库之后,文件处于未修改(Unmodified),编辑文件之后处于修改(Modifyed),将修改的文件放入暂存区(Staged),然后提交所有暂存区的修改,形成了Git的生命周期

2.1 检查当前文件状态
git  status

如果有修改的文件,此时不被跟踪,将提示我们用git add使它被跟踪,git add可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等;运行了 git add 之后又作了修订的文件,需要重新运行 git add 把最新版本重新暂存起来:

git add xxx文件名

用git status会看到文件已被跟踪,并处于暂存状态

2.2 状态简览
$ git status -s
 M README
MM Rakefile
A  lib/git.rb
M  lib/simplegit.rb
?? LICENSE.txt

?? 新添加的未跟踪文件
A 新添加到暂存区中的文件
MM Rakefile 在工作区被修改并提交到暂存区后又在工作区中被修改了,所以在暂存区和工作区都有该文件被修改了的记录。
M 该文件被修改了但是还没放入暂存区
M 该文件被修改了并放入了暂存区

2.3 忽略文件

新建一个.gitignore文件

touch .gitignore
*.[oa]  //忽略所有以 .o 或 .a 结尾的文件
*~       //忽略所有以波浪符(~)结尾的文件

文件 .gitignore 的格式规范如下:

  • 所有空行或者以 # 开头的行都会被 Git 忽略。
  • 可以使用标准的 glob 模式匹配。
  • 匹配模式可以以(/)开头防止递归。
  • 匹配模式可以以(/)结尾指定目录。
  • 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
    glob模式: glob 模式是指 shell 所使用的简化了的正则表达式。 星号()匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。 使用两个星号() 表示匹配任意中间目录,比如a/**/z 可以匹配 a/z, a/b/z 或 a/b/c/z等。
# no .a files
*.a

# but do track lib.a, even though you're ignoring .a files above
!lib.a

# only ignore the TODO file in the current directory, not subdir/TODO
/TODO

# ignore all files in the build/ directory
build/

# ignore doc/notes.txt, but not doc/server/arch.txt
doc/*.txt

# ignore all .pdf files in the doc/ directory
doc/**/*.pdf

2.4查看已暂存和未暂存的修改

git diff 

查看已暂存的将要添加到下次提交里的内容,可以用 git diff --cached 命令

2.5提交更新

git commit 
git commit -m "信息会一行显示"

git commit 会进入vim编辑器,i编辑,esc退出编辑模式 :wq保存并退出

2.6 跳过使用暂存区域

$ git commit -a -m 'added xxx'

给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交

2.7移除文件

移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交.
可以用 git rm 命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。
如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 git rm -f xxx,这样的数据不能被 Git 恢复。

git rm xxx

我们想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中,当你忘记添加 .gitignore 文件,不小心把一个很大的日志文件或一堆 .a 这样的编译生成文件添加到暂存区时,git rm --cached或者glob模式

$ git rm --cached README
$ git rm log/\*.log
$ git rm \*~

2.8 移动文件

重命名file_from 为file_to

$ git mv file_from file_to
$ mv README.md README  //等价于
$ git rm README.md
$ git add README

3 查看提交历史

git log
git log -p -2

-p,用来显示每次提交的内容差异。 你也可以加上 -2 来仅显示最近两次提交

4 撤销操作

$ git commit --amend

如果自上次提交以来你还未做任何修改,那么快照会保持不变,而你所修改的只是提交信息
你提交后发现忘记了暂存某些需要的修改

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

取消暂存 CONTRIBUTING.md 文件

$ git reset HEAD CONTRIBUTING.md

撤销到某个历史版本commit

git log
git reset --hard xxx(commit历史快照)

撤销修改,还原成上次提交时的样子

 git checkout -- CONTRIBUTING.md

撤销所有add的文件

git reset HEAD .

5 远程仓库的使用

5.1 远程仓库的使用
$ git remote
origin  //远程服务器的简写
$ git remote -v //会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL
origin  https://github.com/yangwang12345/node_test.git (fetch)
origin  https://github.com/yangwang12345/node_test.git (push)

5.2 添加远程仓库
$ git remote
origin
$ git remote add pb https://github.com/paulboone/ticgit
$ git remote -v
origin	https://github.com/schacon/ticgit (fetch)
origin	https://github.com/schacon/ticgit (push)
pb	https://github.com/paulboone/ticgit (fetch)
pb	https://github.com/paulboone/ticgit (push)

果你想拉取 Paul 的仓库中有但你没有的信息,可以运行 git fetch pb,现在 Paul 的 master 分支可以在本地通过 pb/master 访问到

$ git fetch pb
5.3 从远程仓库中抓取与拉取
$ git fetch [remote-name]

必须注意 git fetch 命令会将数据拉取到你的本地仓库,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看 - 它并不会自动合并或修改你当前的工作。 当准备好时你必须手动将其合并入你的工作。

5.3 推送到远程分支

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

$ git push origin master //将 master 分支推送到 origin 服务器时

注意:当你和其他人在同一时间克隆,他们先推送到上游然后你再推送到上游,你的推送就会毫无疑问地被拒绝。 你必须先将他们的工作拉取下来并将其合并进你的工作后才能推送。

5.4 查看远程仓库
$ git remote show origin
5.5 远程仓库的移除与重命名
$ git remote rename pb paul
$ git remote
origin
paul

$ git remote rm paul
$ git remote
origin

6 打tag

6.1 查看标签

比较有代表性的是人们会使用这个功能来标记发布结点(v1.0 等等)

$ git tag
v0.1
v1.3

$ git tag -l 'v2017*'  //只对2017开头的tag有兴趣
v20170105
v20170209
v20170216
v20170217
v20170302
v20170303
v20170713
v20170720
v20170721
v20170822
v20171026
6.2 创建标签

附注标签

$ git tag -a v1.4 -m 'my version 1.4'
$ git tag
v0.1
v1.3
v1.4

$ git show v1.4 //查看标签信息

上一章 了解git 下一章 git分支

posted @ 2017-11-01 20:25  吴小小  Views(373)  Comments(0Edit  收藏  举报