progit笔记:Git基础

Progit学习笔记:Git基础

获取Git仓库

通常有两种获取 Git 项目仓库的方式:

  1. 将尚未进行版本控制的本地目录转换为 Git 仓库;
  2. 从其它服务器 克隆 一个已存在的 Git 仓库。

在已存在目录中初始化仓库

$ cd /c/user/my_project
$ git init

如果在一个已存在文件的文件夹(而非空文件夹)中进行版本控制,你应该开始追踪(add)这些文件并进行初始提交(commit)

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

克隆现有的仓库

$ git clone https://github.com/libgit2/libgit2
# 自定义本地仓库名字
$ git clone https://github.com/libgit2/libgit2 mylibgit

记录每次更新到仓库

查看文件处于什么状态

$ git status
  • Changes to be committed: 处于暂存状态
  • Untracked files: 未跟踪文件
  • Changes not staged for commit: 在工作区已修改但尚未暂存

跟踪一个文件

$ git add README

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

注意:运行了 git add 之后又作了修订的文件,需要重新运行git add把最新版本重新暂存起来

状态简览

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

左栏指明了暂存区的状态,右栏指明了工作区的状态

?? 表示新添加的未跟踪文件

忽略文件

$ cat .gitignore

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

注意:一个仓库可能只根目录下有一个.gitignore文件,它递归地应用到整个仓库中,子目录下也可以有额外的.gitignore文件,它只作用于它所在的目录中。

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

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

注意:git diff本身只显示尚未暂存的改动,而不是自上次提交以来所做的所有改动。

# 若要查看已暂存的将要添加到下次提交里的内容
git diff --staged

提交更新

$ git commit

提交开头空行需要输入提交说明

$ git commit -m "Story 182: Fix a little"

跳过使用暂存区

# 自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤
$ git commit -a -m 'added new'

移除文件

# 从已跟踪文件清单中移除(确切地说,是从暂存区域移除),并连带从工作目录中删除指定的文件
$ git rm PROJECTS.md

注意:如果要删除之前修改过或已经放到暂存区的文件,则必须使用强制删除选项 -f(译注:即 force 的首字母)

# 把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中
$ git rm --cached README

移动文件

$ git mv file_from file_to

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

$ mv README.md README
$ git rm README.md
$ git add README

查看提交历史

$ git log

git log会按时间先后顺序列出所有的提交,最近的更新排在最上面。这个命令会列出每个提交的 SHA-1 校验和、作者的名字和电子邮件地址、提交时间以及提交说明。

 # -p 或 --patch ,它会显示每次提交所引入的差异(按补丁的格式输出),使用 -2 选项来只显示最近的两次提交
 $ git log -p -2
 # --stat 每次提交的简略统计信息
$ git log --stat
#  --pretty。 这个选项可以使用不同于默认格式的方式展示提交历史, oneline 会将每个提交放在一行显示
$ git log --pretty=oneline
# format ,可以定制记录的显示格式
$ git log --pretty=format:"%h - %an, %ar : %s"
选项说明
%an作者名字
%ae作者的电子邮件地址
%ad作者修订日期(可以用 --date=选项 来定制格式)
%ar作者修订日期,按多久以前的方式显示
%cn提交者的名字
%ce提交者的电子邮件地址
%cd提交日期
%cr提交日期(距今多长时间)
%s提交说明

限制输出长度

# --since 和 --until 这种按照时间作限制
$ git log --since=2.weeks
# 过滤器 -S,接受一个字符串参数,并且只会显示那些添加或删除了该字符串的提交,例如:找出添加或删除了对某一个特定函数的引用的提交
$ git log -S function_name

限制git log输出的选项:

选项说明
-<n>仅显示最近的 n 条提交
–since, --after仅显示指定时间之后的提交
–until, --before仅显示指定时间之前的提交
–author仅显示作者匹配指定字符串的提交
–committer仅显示提交者匹配指定字符串的提交
–grep仅显示提交说明中包含指定字符串的提交
-S仅显示添加或删除内容匹配指定字符串的提交

撤销操作

# --amend(修订) 选项的提交命令来重新提交
$ git commit --amend

用一个新的提交 替换旧的提交

有时候提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了

取消暂存的文件

# 使用 git reset HEAD <file>... 来取消暂存(在 “Changes to be committed” 文字正下方有提示)
$ git reset HEAD CONTRIBUTING.md

撤销对文件的修改

# git status会提示
$ git checkout -- CONTRIBUTING.md

注意:git checkout -- <file>对该文件在本地的任何修改都会消失。

远程仓库的使用

# 列出你指定的每一个远程服务器的简写
$ git remote
# -v,会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL
$ git remote -v

添加远程仓库

# git remote add <shortname> <url> 添加一个新的远程Git仓库
$ git remote add pb https://github.com/paulboone/ticgit

从远程仓库中抓取与拉取

$ git fetch <remote>

git clone:克隆了一个仓库,命令会自动将其添加为远程仓库并默认以 “origin” 为简写

git fetch:将数据下载到你的本地仓库——它并不会自动合并或修改你当前的工作(no merge)

git pull:自动抓取后合并该远程分支到当前分支(merge)

推送到远程仓库

# origin master:克隆时通常会自动设置好
$ git push origin master

查看某个远程仓库

$ git remote show origin

远程仓库的重命名与移除

# 重命名pb -> paul
$ git remote rename pb paul
# 移除
$ git remote remove paul

打标签

列出标签

$ git tag
# 可带上可选的 -l 选项 --list
$ git tag -l "v1.8.5*"

创建标签

Git 支持两种标签:

  • 轻量标签:很像一个不会改变的分支——它只是某个特定提交的引用。
  • 附注标签是存储在 Git 数据库中的一个完整对象,它们是可以被校验的,其中包含打标签者的名字、电子邮件地址、日期时间,此外还有一个标签信息,并且可以使用GNU Privacy Guard(GPG)签名并验证。
# 创建附注标签
$ git tag -a v1.4 -m "my version 1.4"
# git show 命令可以看到标签信息和与之对应的提交信息
$ git show v1.4
# 创建轻量标签,不需要使用 -a、-s 或 -m 选项,只需要提供标签名字
$ git tag v1.4-lw

共享标签

# git push origin <tagname>
$ git push origin v1.5
# 如果想要一次性推送很多标签,也可以使用带有--tags选项的git push命令
$ git push origin --tags

删除标签

# 要删除掉你本地仓库上的标签,可以使用命令 git tag -d <tagname>
$ git tag -d v1.4-lw
# 从任何远程仓库中移除这个标签
$ git push origin --delete <tagname>

检出标签

# 查看某个标签所指向的文件版本,可以使用git checkout命令
$ git checkout 2.0.0

注意:这会使你的仓库处于“分离头指针(detached HEAD)”的状态,新提交将不属于任何分支,并且将无法访问,需要创建一个新分支。

Git别名

# 为每一个命令设置一个别名
$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status
# git commit 
$ git ci
# 取消暂存别名
$ git config --global alias.unstage 'reset HEAD --'
# 这会使下面的两个命令等价:
$ git unstage fileA
$ git reset HEAD -- fileA
# last 命令
$ git config --global alias.last 'log -1 HEAD'
$ git last
```-
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值