git基础之获取仓库和更新仓库

获取仓库

克隆已有仓库

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

已存在目录初始化仓库

进入项目目录:

git init

更新仓库

工作目录下的每一个文件都不外乎这两种状态:已跟踪 或 未跟踪。已跟踪就是git已经知道的文件。已跟踪的文件状态可能有未修改,已修改和放入暂存区。

检查当前文件状态 git status

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   README.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        text.txt

根据状态命令可以看到,文件README.txt已被跟踪,放入暂存区,文件text.txt未被跟踪。需要使用git add命令进行跟踪

跟踪新文件 git add

$ git add text.txt

Administrator@PC-201706081125 MINGW64 ~/Desktop/testgit/demo (master)
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   README.txt
        new file:   text.txt

git add之后,再次git status,发现文件已经被跟踪。

git add 命令是个多功能命令:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等

例如:被用来暂存已修改的文件。
我们修改了README.txt,会发现这个文件同时出现在暂存区和非暂存区。

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   README.txt
        new file:   text.txt

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   README.txt

我们如果把最后一次的修改提交到版本库,需要再次执行git add README.txt

忽略文件 .gitignore

一些文件无需纳入git的管理,也不需要他们出现在未跟踪文件的列表,我们在 .gitignore文件中列入(文件夹中没有的话,新建的一个.gitignore文件), 将它们忽略。简单的 .gitignore文件的规则:

  • 所有空行或者以 # 开头的行都会被 Git 忽略。
  • 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。
  • 匹配模式可以以(/)开头防止递归。
  • 匹配模式可以以(/)结尾指定目录。
  • 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。

所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。 星号(*)匹配零个或多个任意字符;[abc] 匹配
任何一个列在方括号中的字符 (这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c); 问号(?)只
匹配一个任意字符;如果在方括号中使用短划线分隔两个字符, 表示所有在这两个字符范围内的都可以匹配
(比如 [0-9] 表示匹配所有 0 到 9 的数字)。 使用两个星号( ** )表示匹配任意中间目录,比如 a/ ** /z 可以
匹配 a/z 、 a/b/z 或 a/b/c/z 等。

简单看一个.gitignore文件的例子:

# 忽略所有的 .a 文件
*.a
# 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
!lib.a
# 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO
/TODO
# 忽略任何目录下名为 build 的文件夹
build/
# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf

GitHub 有一个十分详细的针对数十种项目及语言的 .gitignore 文件列表 :https://github.com/github/gitignore

详细查看已暂存和未暂存的修改 git diff

git diff 比较的是工作目录中当前文件和暂存区域快照之间的差异。

git diff --staged比对已暂存文件与最后一次提交的文件差异。

提交更新 git commit

暂存区已经准备就绪,提交暂存区的文件:git commit -m ‘提交说明’

指定提交说明编辑器: git config --global core.editor
$ git commit -m 'add a file'
[master e42d1ce] add a file
 2 files changed, 1 insertion(+)
 create mode 100644 demo/README.txt
 create mode 100644 demo/text.txt

提交时记录的是放在暂存区的快照。

提交后它会告诉你,当前是在哪个分支(master)提交的,本
次提交的完整 SHA-1 校验和是什么(e42d1ce),以及在本次提交中,有多少文件修订过,多少行添加和删改
过。

git commit -a -m ‘提交说明’ 跳过使用暂存区
给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add

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

git rm --cached 我们想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。 换句话说,你想让文件保留在磁盘,但是并不想让 Git 继续跟踪。 这个时候需要使用命令git rm --cached

例如:

git rm --cached README.txt

git mv 重命名或者移动文件

例如:

 $ git mv README.txt README
 
 $ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        renamed:    README.txt -> README

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   README

git mv 相当于运行了下面三条命令:

$ mv README.txt README
$ git rm README.txt
$ git add README
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值