git操作指南
一. git安装配置
【git操作指南】1. 安装git
下载地址
安装完成后,在任意目录下 右键
==> Git Bash Here
就会弹出命令行窗口,说明安装成功。
2. 配置git
配置git
时,首先确保拥有 github
账号。 该步骤配置你的 github
的用户名和邮箱。
配置命令:(引号内换成自己的用户名和邮箱)
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
查看当前git用户信息
$ git config user.name
$ git config user.email
二. 仓库管理 1. 创建本地仓库
创建一个空文件夹作为新的仓库(选择一个已存在的目录也可以) 以
E:\mygit
目录为例进入
E:\mygit
目录下, 在该文件夹下 右键
==> Git Bash Here
$ git init
Initialized empty Git repository in E:/mygit/.git/
mygit 目录下会出现一个
.git
目录,则本地仓库创建成功。 .git
是进行版本跟踪管理的。2. git 区域介绍
git仓库创建完成之后包括了工作区和版本库,版本库主要的区域包括: 暂存区、 分支
工作区add暂存区commit分支
(本地目录)====>>(stage)====>>(本地当前分支)工作区: 即工作的区域,为mygit文件夹
暂存区: 版本库中的暂存区,称为stage
分支:Git会自动创建一个master分支,默认当前分支为master分支
3. git 仓库操作
在
\mygit
目录下(工作区)创建一个空文件 test.txt
,并提交到仓库中。$ git add test.txt将test.txt从工作区加到暂存区
$ git rm --cached test.txt将test.txt从暂存区撤回
$ git commit -m "create test.txt"将test.txt从暂存区提交到分支
此时,
test.txt
被 git
仓库管理了。git add
与 git commit
命令:1 $ git add .将工作区中所有内容加到暂存区(注意:有个点 . )
2 $ git add file1file2将工作区中的 file1 和 file2 加到暂存区3 $ git commit -m "comment"提交到暂存区并为该提交添加一个描述信息(便于理解该提交进行的修改)4 $ git commit -am "comment"该命令是1和3的结合,效果等同于 `1+3` 操作5 $ git status查看当前仓库状态
(1) nothing to commit, working tree clean工作区和暂存区干净
(2)changes not staged for commit工作区的修改未add进暂存区
(3) changes to be commit暂存区的修改未commit
git diff
命令git diff比较的是工作区和暂存区的差别
git diff --cached比较的是暂存区和版本库的差别
git diff HEAD -- file可以查看该文件在工作区和版本库里的差别
三. 版本管理 1. 为 test.txt 设置三个版本
为
\mygit
仓库中的 test.txt
增加内容 abc
,提交 $ git add test.txt
$ git commit -m "add abc"
为
test.txt
增加内容 “This is a version test”
, 提交 $ git add test.txt
$ git commit -m "add sentence"
此时,仓库中的
test
有三个版本: 创建的test
, 增加 abc
后的test
, 增加“This is a version test
”后的test。 可以用 git log
查看提交日志信息。$ git log
commit 671b83b096c1d68c5c80396252c5d27e299ef315 (HEAD -> master)===>> 最新一次提交的版本号
Author: wangchangyuan
Date:Thu Nov 9 16:34:01 2017 +0800add sentence===>> 提交的信息commit 6de209cfd436cd05ffa7d6c82956ed1d400440bc===>> 历史提交
Author: wangchangyuan
Date:Thu Nov 9 16:28:12 2017 +0800add abdcommit 950f14488316b4839d19983cad220caa584d2a36===>> 历史提交
Author: wangchangyuan
Date:Thu Nov 9 16:27:19 2017 +0800create test.txt
git log
的简化版$ git log --pretty=oneline671b83b096c1d68c5c80396252c5d27e299ef315 (HEAD -> master) add sentence
6de209cfd436cd05ffa7d6c82956ed1d400440bc add abd
950f14488316b4839d19983cad220caa584d2a36 create test.txt
2. 版本回退
git reset --hard
当前版本用
HEAD
表示 , 上一版本用 HEAD^
表示,上上版本用HEAD^^
表示, 每一版本都有自己的版本号,即上面那一长串数字。(1) 回退到上一个版本$ git reset --hard HEAD^
HEAD is now at 6de209c add abd(2) 回退到指定版本$ git reset --hard 950f===>> 加版本号的前几位数字即可
HEAD is now at 950f144 create test.txt
此时HEAD指向的是回退过去的版本。
回退到过去的版本后,还可以再回到未来的某一版本,此时通过
git reflog
找到未来版本的版本号,然后设置head
指向该版本即可。$ git reflog
950f144 (HEAD -> master) HEAD@{0}: reset: moving to 950f
6de209c HEAD@{1}: reset: moving to HEAD^
671b83b HEAD@{2}: commit: add sentence
6de209c HEAD@{3}: commit: add abd
950f144 (HEAD -> master) HEAD@{4}: commit (initial): create test.txt$ git reset --hard 671b
HEAD is now at 671b83b add sentence
3. 撤销修改
3.1 撤销工作区的修改
对工作区的文件进行了修改,但还没有
git add
进暂存区, 可以用 git status
看状态。撤销工作区的修改:git checkout -- test.txt
3.2 撤销暂存区的修改
对工作区的文件进行了修改,并且
git add
进了暂存区,可以用 git status
看状态。撤销修改:$ git reset HEAD test.txt===>> 把暂存区的修改撤回,重新放入工作区
$ git checkout -- test.txt===>> 把工作区的修改撤回
4. 文件删除
首先先建立一个文件用于测试演示:
test_rm.txt
$ git status
On branch master
Changes not staged for commit:
(use "git add/rm ..." to update what will be committed)
(use "git checkout -- ..." to discard changes in working directory)deleted:test_rm.txtno changes added to commit (use "git add" and/or "git commit -a")
4.1 工作区的文件误删
此时只需要撤销该操作即可:
$ git checkout -- test_rm.txt
4.2 确认删除版本库中的文件
$ git rm test_rm.txt===>> 删除工作区中的test_rm.txt
$ git commit -m "delete test_rm.txt"===>> 提交删除操作
四. 远程仓库 1. 创建关联远程仓库
远程仓库可以搭建在
github
上,也可以搭建在私有服务器上。在github
上是图形操作,可以 create
一个新的仓库。对于远程的仓库既可以从远程仓库克隆到本地,也可以和已有本地仓库进行连接。
建立连接后,可以查看远程仓库信息:
$ git remote -v
1.1 克隆远程仓库到本地,远程仓库地址为:
git@1.1.1.1:user/moirai.git
在本地一个目录下克隆
$ git clone git@1.1.1.1:user/moirai.git
从远程仓库克隆时,已经自动将
git
本地仓库的 master
分支和远程仓库的 master
分支对应起来了, 远程仓库默认名为 origin
1.2 将已存在的本地仓库与远程仓库连接,在本地仓库主目录下:(
origin
是远程库的名字,默认都是origin
)$ git remote add origin git@1.1.1.1:user/moirai.git
解除与远程仓库的关联:
$ git remote remove 默认情况下 是origin
2. 推送远程仓库
有了远程仓库之后,可以把本地仓库的内容推送到远程仓库:
$ git push -u origin master===>> master是分支名
master
是指把当前master
分支推送到远程仓库;-u
是把本地master
分支和远程master
分支进行关联, 之后可以省略-u
参数3. 拉取远程仓库
当远程仓库被其他人提交修改后,自己在
push
时会出错, 此时需要先从远程仓库中 pull
最新的提交,如果有冲突则在本地合并后再 push
$ git pull
4. 获取远程仓库
从远程仓库获取他人的提交,但在本地不会自动的
merge
。 而 git pull
拉取到本地后会自动merge
$ git fetch origin master
$ git merge origin/master
五. 分支管理
git
仓库默认的分支为 master
主分支,前面版本回退提到的 HEAD
实际是指向当前分支 master
, 图中每个节点是一次提交,当版本回退时实际是将 master
指向了前面的节点。[图片上传失败...(image-4dfffa-1551108699579)]
1. 创建分支
在
git
仓库中默认处于 master
分支,开发时一般将 master
分支作为稳定版本发布的分支,会另建一个分支作为开发分支。创建一个 develop
分支: $ git branch develop
2. 切换分支
默认所处分支为
master
, 切换到 develop
分支上去:$ git checkout develop
其实1+2的功能可以用下面命令合并实现:
$ git checkout -b develop===>>创建并切换到分支 develop
在创建分支的同时与远程仓库的分支对应起来:
$ git checkout -b develop origin/develop
或者
$ git branch --set-upstream develop orgin/develop
3. 查看当前分支
查看当前处于哪个分支:
$ git branch
* develop===>> 展示出所有分支,当前分支前带 * 号
master
4. 合并分支
4.1 无冲突合并
只在
develop
分支上对 test.txt
进行一次修改并提交:$ git add test.txt
$ git commit -m "add test info for develop"
切换回
master
分支$ git checkout master
查看
test.txt
文件,发现刚才的修改不见了。 这是因为修改是发生在 develop
分支上,对 master
分支没影响。修改完之后可以将
develop
分支与 master
分支进行合并。 (注意当前是在 master
分支上)$ git merge develop===>> 将 develop 分支合并到当前 master 分支上
4.2 有冲突合并
在
develop
分支上修改了test.txt, 同时切换回 master
分支后也进行修改, 合并时会有冲突:$ git merge develop
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed;
fix conflicts and then commit the result.
根据提示要先解决冲突, 此时查看
Test.txt
内容:abc
this is a git test file.
<<<<<<< HEADadd merge and conflict for master
=======
add something totest the develop branch.test branch merge and conflict
>>>>>>> develop
这是因为在不同的分支上对同一个文件都进行了修改,需要手动解决冲突,修改完
test.txt
之后重新 git add
并 git commit
即可修复冲突。4.3 查看分支合并
用
git log --graph
可以查看分支合并图的情况。 --pretty=oneline
表示一行显示; --abbrev-commit
表示只显示 commit
版本号和comment信息$git log --graph --pretty=oneline --abbrev-commit
*ee60ae5 (HEAD -> master) conflict fixed
|\
| * ee7b768 (develop) add merge info for develop
| * b17679a add test info for develop
* | 1decf7a add merge info for master
|/
* 6970fc4 delete test_rm.txt
* d82b873 add test_rm.txt
* 671b83b add sentence
* 6de209c add abd
* 950f144 create test.txt
4.4 不同合并方式
在4.1 采用的分支合并方式是
Fast forward
模式:$ git merge develop
Updating ff3d8cc..c283635
Fast-forward
test.txt | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
另一种合并模式是
--no-ff
:$ git merge --no-ff -m "merge without fast-forward" develop
比较两者区别:
Fast-forward: 快速合并模式,将 `HEAD` 快速地指向 `develop` 分支的当前提交。该方式没有对合并进行 `commit`,在删除该分支后会丢失该分支的信息。--no-ff:保留分支的 `commit` 历史信息, 所以该命令需要有 `-m` 参数,并增加提交的说明信息。
5. 删除分支
合并完分支之后,可以将其删除:
$ git branch -d develop
强制删除:
$ git branch -D develop
6. 暂储分支
正在某个分支上进行开发,但临时需要先建立新分支去进行其他的工作,建立分支前需要将当前分支的修改进行提交,但此时修改内容还不能
commit
。 此时可以将当前分支的修改暂时储藏起来 git stash
$ git stash
这样工作区就是干净的了,可以建立新分支。
回到刚才分支恢复工作区的修改, 有两种恢复方式:
$ git stash list===>> 查看stash的内容
1 $ git stash apply===>> 恢复stash内容,同时保留了stash内容
2 $ git stash pop===>> 恢复stash内容,同时删除了stash内容
对于多次
stash
的内容,在恢复时可以选择性的恢复:$ git stash apply stash@{0}===>>表示恢复 stash@{0}
六. 标签管理 git 的
commit
版本号是一串很长的数字,难以区分版本。 所以为版本打一个容易理解的标签很重要。- 为当前最新版本打标签:
$ git tag v1.0===>>为当前版本打标签: v1.0
- 为之前提交的版本打标签:
$ git tag v0.1 commit-id===>>commit-id指的是之前版本提交的版本号id
- 为某个版本打上带有说明的标签:
$ git tag -a v0.2 -m "comment" commit-id===>>为commit-id版本打上说明为 “comment”的标签
- 查看当前分支中的标签:
$ git tag
- 查看某个标签的详细信息:
$ git show v1.0
- 删除标签:
$ git tag -d v1.0===>> 删除v1.0这个标签
- 标签推送到远程仓库:
$ git push origin v1.0===>> 将标签v1.0推送到远程 $ git push origin --tags===>> 将所有标签一次性推送到远程
- 删除远程标签:
$ git tag -d v1.0===>>先将本地标签删除 $ git push origin :refs/tags/v1.0===>>再将远程标签删除
- 本地仓库基础操作
$ git init==>初始化本地仓库 $ git add file/files/.==>增加文件到暂存区 $ git commit -m "comment"==>提交到版本库 $ git status==>查看仓库状态 $ git diff==>查看修改内容 $ git log==>查看提交历史 $ git reflog==>查看命令历史
- 版本操作
$ git reset --hard commit-id==>版本回退到commit-id $ git reset --hard HEAD^==>版本回退到上次提交
- 删除操作
$ git checkout -- file==>撤销工作区file的修改 $ git reset HEAD file==>撤销暂存区file的修改 $ git rm file==>删除工作区的file $ git commit -m "delete file"==>提交对file的删除操作
- 远程仓库操作
$ git remote -v==>查看远程库信息 $ git remote add origin git@server-name:path/repository.git==>关联远程仓库 $ git clone git@server-name:path/repository.git==>克隆远程仓库 $ git push -u origin master==>首次推送本地master分支内容到远程仓库 $ git pull==>拉取远程仓库内容并自动本地融合 $ git fetch==>拉取远程仓库内容,不自动融合
- 分支操作
$ git branch==>查看当前分支 $ git branch
==>创建新分支 $ git checkout ==>切换到分支 $ git checkout -b ==>创建并切换到新分支 $ git merge ==>将分支合并到当前分支 $ git merge --no-ff -m "comment" ==>非Fast-forward方式合并分支到当前分支 $ git branch -d ==>删除分支 $ git branch -D ==>强制删除分支 $ git log --graph==>查看分支合并图$ git checkout -b branch-name origin/branch-name==>在本地建立与远程分支对应的分支 $ git branch --set-upstream branch origin/branch==>将本地已有的分支与远程分支建立关联
- 暂存分支工作现场
$ git stash==>将当前分支的工作现场储藏 $ git stash list==>查看储藏起来的工作现场 $ git stash apply==>恢复工作现场,保留stash内容 $ git stash drop==>删除stash内容 $ git stash pop==>恢复工作现场同时删除stash内容
- 标签操作
$ git tag==>查看当前所有标签信息 $ git tag
==>为当前分支最新的提交打标签 $ git tag commit-id==>为当前分支 commit-id标识的提交打标签 $ git show ==>查看标签 的详细信息 $ git tag -a -m "comment" commit-id==>为提交打上带有说明的标签
推荐阅读
- 一个人的旅行,三亚
- 一个小故事,我的思考。
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 开学第一天(下)
- 一个人的碎碎念
- 2018年11月19日|2018年11月19日 星期一 亲子日记第144篇
- 遇到一哭二闹三打滚的孩子,怎么办┃山伯教育
- 第326天
- Y房东的后半生14
- 奔向你的城市