-
git init
将工作区中的项目文件使用git进行管理,即创建一个新的本地仓库
git init
-
git clone
远程操作的第一步,通常是从远程主机克隆一个项目
git clone <url>
比如,克隆npm的版本库。
git clone https://github.com/npm/npm.git
克隆项目时如果想定义新的项目名
git clone <url> <本地目录名>
-
git remote
查看本地仓库关联的远程仓库
不带选项的时候,git remote
命令列出所有远程主机。
git remote
origin
加上-v
选项,可以参看远程主机的网址。
git remote -v
origin https://github.com/npm/npm.git
?
// 表示当前只有一台远程主机,叫做origin,以及它的网址。
克隆版本库的时候,所使用的远程主机自动被Git命名为origin
。如果想用其他的主机名,需要用git clone
命令的-o
选项指定。
git clone -o npm https://github.com/npm/npm.git
$ git remote
npm
?
// 表示,克隆的时候,指定远程主机叫做npm。
git remote show?
命令加上主机名,可以查看该主机的详细信息。
git remote show <主机名>
git remote add?
命令用于添加远程主机。
git remote add <主机名> <url>
git remote rm?
命令用于删除远程主机。
git remote rm <主机名>
git remote rename?
命令用于远程主机的改名。
git remote rename <原主机名> <新主机名>
-
git add
提交工作区所有文件到暂存区:
git add .
提交工作区中指定文件到暂存区:
git add <文件1> <文件2> ...
提交工作区中某个文件夹中所有文件到暂存区:
git add [文件夹]
-
git commit
将暂存区的文件提交到本地仓库并添加提交说明
git commit -m "本次提交的说明"
将所有已经使用git管理过的文件暂存后一并提交,跳过add到暂存区的过程:
git commit -am "commit_info"
// 未跟踪的文件是无法提交上去的
提交文件时,发现漏掉几个文件,或者注释写错了,可以撤销上一次提交:
git commit --amend
修复提交,同时修改提交信息
git commit --amend -m "本次提交的说明"
加入 --no-edit 标记会修复提交但不修改提交信息,编辑器不会弹出上一次提交的信息
git commit --amend --no-edit
-
git pull
取回远程主机某个分支的更新,再与本地的指定分支合并
git pull <远程主机名> <远程分支名>:<本地分支名>
比如,取回origin
主机的next
分支,与本地的master
分支合并,需要写成下面这样。
git pull origin next:master
如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
git pull origin next
?
// 取回origin/next分支,再与当前分支合并。实质上,这等同于先做git fetch,再做git merge。
如果当前分支只有一个追踪分支,连远程主机名都可以省略。
git pull
// 当前分支自动与唯一一个追踪分支进行合并。
如果合并需要采用rebase模式,可以使用--rebase
选项。
$ git pull --rebase <远程主机名> <远程分支名>:<本地分支名>
-
git fetch
git pull
不同的是 git fetch
操作仅仅只会拉取远程的更改,不会自动进行 merge 操作。对你当前的代码没有影响
// 获取远程仓库特定分支的更新
git fetch <远程主机名> <分支名>
// 获取远程仓库所有分支的更新
git fetch --all
-
git push
将本地分支的更新,推送到远程主机。
如果远程仓库没有这个分支,会新建一个同名的远程分支
如果省略远程分支名,则表示两者同名
git push <远程主机名> <本地分支名>:<远程分支名>
?
git push origin branchname
如果省略本地分支名,则表示删除指定的远程分支
因为这等同于推送一个空的本地分支到远程分支。
git push origin :master
?
// 等同于
?
git push origin --delete master
如果当前分支与多个主机存在追踪关系,则可以使用-u
选项指定一个默认主机
git push -u origin master
// 将本地的master分支推送到origin主机,同时指定origin为默认主机
如果当前分支与远程分支之间存在追踪关系
则可以省略分支和 -u
git push
将本地的所有分支都推送到远程主机
git push --all origin
?
// 将所有本地分支都推送到origin主机
-
git branch
新建本地分支,但不切换
git branch <分支名>
查看本地分支
git branch
查看远程分支
git branch -r
查看本地和远程分支
git branch -a
删除本地分支,会阻止删除包含未合并更改的分支
git branch -d <分支名>
强制删除一个本地分支,即使包含未合并更改的分支
git branch -D <分支名> ?
重新命名分支
git branch -m <旧的分支名> <新的分支名>
-
git checkout
切换分支(切换分支时,本地工作区,仓库都会相应切换到对应分支的内容) $
git checkout <分支名> ?
创建一个 a 分支,并切换到该分支 (新建分支和切换分支的简写)
git checkout -b a
可以看做是基于 master 分支创建一个 a 分支,并切换到该分支
git checkout -b a master
-
git merge
merge命令把不同的分支合并起来。如上图,在实际开放中,我们可能从master分支中切出一个分支,然后进行开发完成需求,中间经过5,6的commit记录,最后开发完成需要合入master中,这便用到了merge。
git fetch [remote] merge
// 之前先拉一下远程仓库最新代码
git merge [branch]
// 合并指定分支到当前分支
-
git reset
重置暂存区最近的一次提交,但工作区的文件不变
git reset
重置暂存区与工作区,回退到最近一次提交的版本内容
git reset --hard
重置暂存区与工作区,回退到最近一次提交的上一个版本
git reset --hard HEAD^
?
git rebase dev
,通俗的解释就是new分支想站在dev的肩膀上继续下去。rebase也需要手动解决冲突。?
-
git revert
git revert用一个新提交来消除一个历史提交所做的任何修改。
git reset HEAD^ ? ? ? ? ? ?
// 回退所有内容到上一个版本 ?
git reset HEAD^ hello.js ?
// 回退 hello.js 文件的版本到上一个版本
?
git ?reset ?052e ? ? ? ? ?
// 回退到指定版本
HEAD 说明:
-
HEAD 表示当前版本
-
HEAD^ 上一个版本
-
HEAD^^ 上上一个版本
-
HEAD^^^ 上上上一个版本
-
以此类推...
可以使用 ~数字表示
-
HEAD~0 表示当前版本
-
HEAD~1 上一个版本
-
HEAD^2 上上一个版本
-
HEAD^3 上上上一个版本
-
以此类推...
-
其他命令
git status | 显示有变更的文件 |
---|
git log | 显示当前分支的版本历史 |
git diff | 显示暂存区和工作区的差异 |
git diff HEAD | 显示工作区与当前分支最新commit之间的差异 |
git cherry-pick [commit] | 选择一个commit,合并进当前分支 |
git rm <file> | 删除文件 |
git mv [file] [newfile] | 用于移动或重命名一个文件、目录或软连接。 |