git 镜像下载
git官网乌龟爬 给你一个大宝贝 下载地址看这里:git-for-windows Mirror
如果是64位的window系统选择 第3个,32位就选择第1个
git安装
我就直接next就行,最多该一下安装地址
Git是什么
Git 的工作区域和流程
Workspace:工作区,就是平时进行开发改动的地方,是当前看到最新的内容,在开发的过程也就是对工作区的操作
Index:暂存区,当执行 git add
的命令后,工作区的文件就会被移入暂存区,暂存区标记了当前工作区中那些内容是被 Git 管理的,当完成某个需求或者功能后需要提交代码,第一步就是通过 git add
先提交到暂存区。
Repository:本地仓库,位于自己的电脑上,通过 git commit
提交暂存区的内容,会进入本地仓库。
Remote:远程仓库,用来托管代码的服务器,远程仓库的内容能够被分布在多个地点的处于协作关系的本地仓库修改,本地仓库修改完代码后通过 git push
命令同步代码到远程仓库。
一般来说,Git 的工作流程分为以下几步
1. 在工作区开发,添加,修改文件。
2. 将修改后的文件放入暂存区。
3. 将暂存区域的文件提交到本地仓库。
4. 将本地仓库的修改推送到远程仓库。
git使用
-
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] 用于移动或重命名一个文件、目录或软连接。