获取与创建项目
-
创建仓库的一般途径有:
- 在本地的目录进行初始化;
- 克隆复制一份别人的项目。
git init
- 在当前目录下创建.git目录,并将当前目录设为一个Git仓库。
git clone(下载开源项目时常用)
git clone Git仓库url:将http或ssh链接指向的Git仓库拷贝到本地。git clone Git仓库url 本地目录路径:将远程Git仓库拷贝到本地指定目录。
添加与提交
基本流程
- 使用
git add添加需要追踪的新文件和待提交的更改; - 使用
git status和git diff查看有何改动; - 使用
git commit提交快照。
git add
-
git add 文件:将文件添加到缓存区,该文件被标记为被追踪。 -
git add .:缓存当前目录下所有文件,不包括已删除的文件。 -
注意,git add只是复制一份当前状态下的该文件到缓存区,该文件之后的修改若不重新git add,则提交的时候,只会将上次git add的缓存提交给仓库。
git commit
- 将缓存写入仓库中。
git add是工作区->缓存区,git commit是缓存区->仓库。git commit -m "本次提交说明":一次性将缓存区所有文件修改提交到仓库的当前分支。git commit -am "本次提交说明":自动把所有已经跟踪过的文件缓存,并提交到仓库。常用于跳过git add步骤快速提交。git commit --amend "本次提交说明":重新提交。此次提交代替上一次提交的结果。尤其适用于提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了的情况。
git status
-
git status:显示当前仓库的最新状态。 -
git status -s:当前仓库的最新状态的简介。
git diff
-
git diff:比较工作区和缓存区的不同。 -
git diff --cached:比较缓存区和仓库的不同。 -
git diff 文件:比较指定文件在工作区和缓存区的不同。 -
git diff 文件 --cached:比较指定文件在缓存区和仓库的不同。 -
git diff 提交版本号1 提交版本号2:比较两次提交之间的区别。 -
git diff 分支1 分支2:比较两个分支之间的区别。 -
注意:只会比较那些跟踪文件(即
git add过的文件)。
git show
git show:查看最后一个提交的内容。git show HEAD~1:查看倒数第二个提交的内容。git show 提交版本号:查看指定提交的内容。
删除与恢复
git rm
-
主要用于从版本库中删除文件。
-
git rm 文件:把文件从版本库中删除,不再跟踪。 -
git rm log/*.log:将log目录下扩展名为.log的所有文件从版本库中删除,不再跟踪。通常适用于不小心把一些编译、日志、debug文件错误提交到版本库。 -
git rm -f 文件:当文件有未提交的缓存区修改时,直接使用git rm 文件会报错。此时执行此命令可强制将文件从缓存区和版本库中删除。 -
git rm --cached 文件:把文件从版本库中删除,但让文件保留在工作区且不被Git继续跟踪。通常适用于rm文件之后把其添加到.gitignore中。
恢复
-
git checkout -- 文件:丢弃工作区的修改。此文件必须是Git跟踪的。- 修改后仍未放到缓存区,恢复到上一次
git commit的状态。 - 添加到缓存区后又做了修改,恢复到上一次
git add的状态。
- 修改后仍未放到缓存区,恢复到上一次
-
git reset HEAD 文件:丢弃缓存区的修改,回退到工作区。 -
git reset --hard:重置所有文件到上次commit的状态。 -
git reset --hard HEAD~1:将当前分支重置为倒数第2个版本。 -
git reset --hard 提交版本号:将当前分支重置为指定版本。
版本控制
版本号
- Git的版本号是SHA1校验和,而不是用递增的1、2、3……,因为分布式的版本控制系统要确保每个用户的修改记录都是唯一的,不会发生版本号冲突的情况。
HEAD表示当前版本,HEAD^表示上一个版本,HEAD~100表示往上100个版本。
git log
-
git log:显示从最近到最远的提交日志。包含每个提交的SHA1校验和、作者的名字和邮箱、提交时间以及提交说明等。 -
git log --oneline:git log的简要版 -
git log --decorate:不仅输出git log的信息,还带标签等额外信息。 -
git log --graph不仅输出git log的信息,还可查看当前分支什么时候出现了分支、合并。 -
git log 分支名:查看指定分支的提交日志。 -
git log 要查看的分支名branchA ^要忽略的分支名branchB:查看branchA的日志信息(排除branchB的信息)
git tag
-
git tag:查看所有标签。注意:标签不是按时间列出,而是按字母排序。 -
git show <tag-name>:查看指定标签的信息。 -
git tag <tag-name> <commit-id>:在指定版本号上打上标签。 -
git checkout <tag-name>:切换到指定标签。 -
git push --tags:将标签推送给远程仓库。
远程项目
git remote
git remote add <shortname> <url>:添加并关联一个远程库。shortname一般为origin。
git push
git push <remote-repo-shortname> <local-branch>:将本地分支推送到远程仓库。
git pull
git pull <remote-shortname> <local-branch>:拉取远程仓库最新提交,并合并到指定的本地分支上。git fetch:拉取远程仓库最新提交,但不会自动合并分支。
分支
git branch
-
git branch:列出本地分支列表。当前分支前会标有*号。 -
git branch -r:列出远程分支列表。 -
git branch -a:列出所有分支列表。 -
git branch 分支:创建新分支。 -
git branch -d 分支:删除指定分支。 -
git branch -v -a:查看所有分支的最后一次提交。
git checkout
git checkout 分支:切换到指定分支。git checkout -b 分支:创建并切换到指定分支。
git merge
git merge 分支:将指定分支合并到当前分支上。
git config
-
git config --list:列出所有配置信息。 -
git config <key>:检查关键字key的配置。如git config user.name,查看姓名配置。