git基本命令
- git init 在现有目录中初始化仓库
- git clone 默认配置下远程Git仓库中的每一个文件的每一个版本都将被拉取下来
- git status 查看文件处于什么状态
git status -S/--short
- git add 开始跟踪一个文件或者暂存某次更新的文件
- cat .gitignore
文件 .gitignore 的格式规范如下:
- 所有空行或者以 # 开头的行都会被 Git 忽略。
- 可以使用标准的 glob 模式匹配。
- 匹配模式可以以(/)开头防止递归。
- 匹配模式可以以(/)结尾指定目录。
- 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
- git diff 查看尚未暂存的文件更新了哪些部分,比较工作目录中当前文件和暂存区域快照之间的差异
git diff --cached/--staged 查看已暂存的将要添加到下次提交的内容
- git commit 提交(看一看到最后一次运行git status的输出)
commit 命令后添加 -m 选项,将提交信息与命令放在同一行
git commit -a 自动把所有已经跟踪过的文件暂存起来一并提交
git commit -amend 尝试重新提交(会将暂存去中的文件提交)
- git rm 将文件从暂存区域移除,并从工作目录中删除
git rm --cached 让文件保留在磁盘,但是并不让 Git 继续跟踪
- git mv a b 对文件进行改名
- git log 回顾提交历史
git log -p 用来显示每次提交的内容差异
git log --stat 看到每次提交的简略统计信息
选项 | 说明 |
---|---|
-(n) | 仅显示最近的 n 条提交 |
--since, --after | 仅显示指定时间之后的提交 |
--until, --before | 仅显示指定时间之前的提交 |
--author | 仅显示指定作者相关的提交 |
--committer | 仅显示指定提交者相关的提交 |
--grep | 仅显示含指定关键字的提交 |
-S | 仅显示添加或移除了某个关键字的提交 |
- git reset HEAD a 取消暂存
虽然在调用时加上 --hard 选项可以令 git reset 成为一个危险的命令(译注:可能导致工作目录中所有当前进度丢失!)
- git checkout -- [file] 撤消修改
远程仓库的使用
远程仓库是指托管在因特网或其他网络中的你的项目的版本库。
- git remote 列出已制定的每一个远程服务的简写
git remote -v,显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL
- git remote add <shortname> <url> 添加一个新的远程 Git 仓库,同时指定一个可以轻松引用的简写
- git fetch [remote-name] 拉取远程仓库中的信息
- git pull 通常会从最初克隆的服务器上抓取数据并自动尝试合并到当前所在的分支
- git push origin master 将 master 分支推送到 origin 服务器
运行带有 --delete 选项的 git push 命令来删除一个远程分支
- git remote show [remote-name] 查看某一个远程仓库的更多信息
- git remote rename 修改一个远程仓库的简写名
- git remote rm 想要移除一个远程仓库
- git tag 在 Git 中列出已有的标签
Git 使用两种主要类型的标签:轻量标签(lightweight)与附注标签(annotated)
- git show 看到标签信息与对应的提交信息
- git checkout -b [branchname] [tagname] 在特定的标签上创建一个新分支
- git config 为一个命令设置一个别名:git config --global alias.co checkout
Git分支
Git 保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照,在进行提交操作时,Git会保存一个提交对象(该提交对象会包含一个指向暂存内容快照的指针、作者的姓名和邮箱、提交时输入的信息以及指向它的父对象的指针)。
首次提交产生的提交对象没有父对象,普通提交操作产生的提交对象有一个父对象,而由多个分支合并产生的提交对象有多个父对象。
Git 的分支,其实本质上仅仅是指向提交对象的可变指针。 Git 的默认分支名字是 master。
在多次提交操作之后,你其实已经有一个指向最后那个提交对象的 master 分支。 它会在每次的提交操作中自动向前移动。
- git branch a 创建新分支,但不会切换分支
- 不加任何参数运行它,会得到当前所有分支的一个列表
- git branch -v 需要查看每一个分支的最后一次提交
- --merged 与 --no-merged 这两个有用的选项可以过滤这个列表中已经合并或尚未合并到当前分支的分支
- git branch -d 删除分支
- git checkout 切换到一个已经存在的分支
git checkout -b 新建一个分支并同时切换到那个分支上
git log --oneline --decorate --graph --all ,它会输出你的提交历史、各个分支的指向以及项目的分支分叉情况
- git merge master 将其合并回 master 分支来部署到线上
- git mergetool 启动一个合适的可视化合并工具,并带领你一步一步解决这些冲突
- git rebase master 将提交到某一分支上的所有修改都移至另一分支上
$ git checkout experiment
$ git rebase master
First, rewinding head to replay your work on top of it...
Applying: added staged command
$ git checkout master
$ git merge experiment