git init
初始化一个 Git 仓库(repository),即把当前所在目录变成 Git 可以管理的仓库。
git add
文件 把文件添加到 暂存区(stage),可被 track 追踪纪录下来。可多次使用来添加多个文件。
* 添加所有修改到暂存区,效果同 git add all,待验证。
. 暂存新增加的和修改的文件,不包括已删除的文件。即当前目录下所有文件。
-p 暂存文件的一部分,会逐部分询问是否添加
git commit
-m 一次性把暂存区所有文件修改提交到仓库的当前分支。
-am 使用该命令,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交。相当于add+commit
--amend 重新提交,覆盖上一次的提交。尤其适用于提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了的情况。
-p commit 文件的一部分,会逐部分询问是否提交
git status
显示当前仓库的最新状态。
提交之后,工作区就是“干净的”,即没有新的修改;
有未提交文件时,分三个部分:
1.在 stage 的,修改了的文件,即将被 commit
2.没有 stage 的,修改了的文件,但被git track过的文件。
3.新的还没有被git track过的文件。
git diff
查看工作区中的修改。
--staged 查看 暂存区中的修改。
<commit id1> <commit id2> 比较两次 commit 之间的差异。
<branch1> <branch2> 在两个 branch 之间比较。
文件 查看指定文件具体修改了哪些内容。
HEAD -- 文件 查看版本库最新版本和工作区之间的区别。就是查看自己pull以来修改了什么
git show
查看最后一个 commit 的修改。
git log
显示从最近到最远的提交日志
-p 除显示基本信息之外,显示每次提交的内容差异
-2 仅显示最近两次提交。
-pretty=oneline 简化日志信息,将每个提交放在一行显示
git checkout -- 文件 丢弃工作区的修改,让该文件回到最近一次 git commit 或 git add 之后的状态。
丢弃的范围包括
1. 修改后还没有放到stage
2. 添加到stage后又作了修改
git reset
HEAD 文件 把stage的修改撤销(unstage),回退到工作区。
--hard 重置所有文件到未修改的状态。
--hard HEAD 回退到某个版本版本(回退上个版本为:HEAD^, 上上个版本为HEAD^ ^,上100个版本为:HEAD-100)
<commit SHA> 重置到某个 commit。
HEAD~1 将当前 branch 重置为倒数第二个 commit (即丢弃最后一个 commit)。
git revert
revert实质是产生一个新的 commit,内容和要还原的 commit 完全相反。 比如,A commit 在 main.c 中增加了三行,revert A 产生的 commit 就会删除这三行。
<commit id> 还原某个 commit。
HEAD 还原到上次 commit。
git rm
文件 把文件从版本库和工作区中删除,不会再追踪到。
-f 文件 强制删除版本库和工作区中有修改的文件。
--cached 文件 把文件从版本库中删除,但让文件保留在工作区且不被 Git 继续追踪(track)
git remote
查看已经配置的远程仓库服务器
-v 显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL。
ls-remote <remote-name> 显示获得远程引用的完整列表。一般查看HEAD是哪个版本
show <remote-name> 可以得到远程分支更为详细的信息以及 pull 和 push 相关提示信息。
add <shortname> <url> 添加并关联一个远程库。其中,shortname用来代替整个 url。
git push
推送本地修改到 origin。
-u origin master 关联后,使用该命令第一次推送 master 分支的所有内容
origin 远程分支(通常是 master) 推送最新修改。
rename old_name new_name 重命名一个远程仓库的简写名。
rm <remote-name> 移除一个远程仓库。
origin --delete <remote branch name> 删除一个远程分支。
origin --delete <branch name> 在本地和远程同步删除分支。
git clone
git@github.com:username/<repo name>.git 从远程库(origin)克隆一份到本地,仓库名同远程仓库名。
https://github.com/username/repo name.git 作用同上。但不建议使用 https 协议
<repo url> <folder name> 克隆一个仓库到指定文件夹。
<repo url> 克隆一个仓库到当前文件夹(应该是空的)。
git branch
列出本地当前所有分支,方便查看。当前分支前面会标有一个 * 号。
-r 查看远程分支列表。
-a 显示所有分支,包括本地和远程。
-v 查看每一次分支的最后一次提交。
-vv 查看设置的所有跟踪分支。将所有的本地分支列出来并且包含更多的信息
--merged 查看所有已经被 merge 的 branch。
--no-merged 查看所有还没被 merge 的 branch。
git checkout <branch name>
切换到该branch
-b <branch name> 创建并切换到新的branch,相当于下面两条命令:git branch 分支 + git checkout 分支。
- 切换到上一个 branch。
git merge <branch name>
合并指定branch到当前所在的分支。
--no-ff -m "提交说明信息" <branch name> 用普通模式合并
参数 –no-ff 表示 禁用Fast forward快进模式, 快进模式看不出来曾经做过合并,而普通模式可以
-d <branch name> 普通删除分支。一般情况下,先合并完分支,然后再删除,否则会删除失败
-D <branch name> 强行删除分支
git rebase <target branch name>(通常是 master)
在本地 master 上进行变基操作。
注意:merge 与 rebase 都是整合来自不同分支的修改。
merge 会把两个分支的最新快照以及二者最近的共同祖先进行三方合并,合并的结果是生成一个新的快照(并提交)。
rebase 会把提交到某一分支(当前分支)上的所有修改都转移至另一分支(目标分支)上,就好像“重新播放”一样。
变基是将一系列提交按照原有次序依次应用到另一分支上,而合并是把最终结果合在一起。
简言之:这两种整合方法的最终结果没有任何区别,但是变基使得提交历史更加整洁。
–ongo 目标分支 第一分支 第二分支:选中在第二分支里但不在第一分支里的修改,将它们在目标分支(通常是 master)上重演。
git stash
把当前分支的工作现场储存起来,等以后恢复现场后继续工作。一般适用于还没有 commit 的分支代码。
list 查看储存的工作现场纪录列表。
apply 恢复最近 stash 过的工作现场
drop 删除储存的工作现场
pop 相当于上面两条命令,恢复回到工作现场的同时把 stash 内容也删除了
clear 清空所有暂存区的 stash 纪录
网友评论