工作区:写代码的地方,写完之后,需要暂存提交,提交到暂存区。暂存区会建立指针,指向工作区,暂时保存工作区的状态。
暂存区完了之后,要提交到本地仓库。本地仓库就存储各个节点的版本。恢复和跳跃都是在本地仓库操作。
自己的仓库对于别人来说,也是远程仓库。
git init :初始化仓库,工作区暂存区本地仓库都有了。
查看分支状态:git status
git要工作区和本地仓库保持一致,因为只有在本地仓库才能git管理,否则就是普通的文件夹。此时git status就会提示:新建的文件没有跟踪。所以需要提交到本地仓库,提交到本地仓库之前需要提交到暂存区。
git add file1 file2 file2 :提交到暂存区。
git add *:提交所有文件到暂存区。
暂存区只是记录工作区的状态,还没有提交到本地仓库。
如果提交错了:git rm --caches 文件名 取消暂存。删除暂存区的记录。
git commit -m “注释” :提交到本地仓库。Id是提交码。
git status:无文件提交,干净的工作区。就是工作区和本地仓库一样了。
git log:越新的提交越在前面。
$ git log
commit 8dbc5b2fa8843fb5dc8178caa418df398cc1c83b (HEAD -> dev, origin/dev) 全球唯一的提交id,提交时候会显示前7位。
Author: 672530440 <672530440@qq.com>
Date: Sun Feb 23 14:13:16 2020 +0800
修改许可证拆单
commit 5a6b9f4364abbdf55fe29e78543d940d7812650c
Author: 672530440 <672530440@qq.com>
Date: Fri Feb 21 18:55:05 2020 +0800
添加许可证postman_collection.json
根据全球唯一的提交id,提交时候会显示前7位 用于回退。回退就是根据提交码回退的。
$ git log --pretty=oneline 简单显示提交日志
8dbc5b2fa8843fb5dc8178caa418df398cc1c83b (HEAD -> dev, origin/dev) 修改许可证拆单
5a6b9f4364abbdf55fe29e78543d940d7812650c 添加许可证postman_collection.json
2943750fa6c61ce2272cef01eb8fd21b6a2124af 新增许可变更列表,详情接口。
39c0845a392d800e951c767fb968d6d52ada8b8b 生成许可变更相关类。
bcd0cef864a1035342b55755be8a6bf9fa1dc5c0 Merge branch 'dev' of https://gitee.com/SOFTWARE-DEV/nfamp_new into dev
git diff 文件名:比较本地仓库和工作区的差异。
git checkout 文件名:恢复文件,从本地仓库恢复到工作区。
gti mv :工作区和本地仓库都移动了。还要git commit
git rm 文件名:工作区和本地仓库都删除了。还要git commit
git log:查看版本记录。
gti reset --hard HEAD^:回到上一个版本,HEAD的^决定回到上几个版本。
git reset --hard 173dec3 :回到指定版本。提交id的前7位。回到老版本。
gti reflog:查看所有历史版本号。刚才已经回到老版本了,现在又要回到之前的新版本,git log已经查不到了,只能通过gti reflog。gti reflog始终会有所有操作记录,最新的在上面。
git reset --hard 666dec8:
HEAD是一个指针,指向当前正在工作的版本。
标签也是版本控制的一种。在当前工作位置添加快照,保存工作状态。一般用于版本的迭代。比如1.0版本。
里程碑事件会添加标签。
git tag v1.0:打标签。默认在最新的commitId处打标签。
git tag:查看标签
git tag -d v1.0:删除标签
git tag v1.0 -m “注释”:
git show v1.0:查看标签信息
git tag v0.9 comit_id:在某个提交id处打标签。提交id的前7位。
git reset --hard v0.9:恢复到标签处。
临时工作区操作。
git stash:保存工作目录
git stash list:
gti stash apply stash@{1}:工作区恢复到第二个。
然后就可以add comit并且删除其他的临时工作区了。
git stash drop stash@{0}:删除指定临时工作区
gti stash clear:删除所有临时工作区
git branch:查看分支
$ git branch
* master: *表示当前正在工作的分支
$ git branch ye :创建分支
$ git branch:列出分支,都是master分支创建的。
* master
ye
yr
$ git checkout ye :切换分支,远程是没有分支的。
Switched to branch 'ye'
不同的分支创建文件,然后add commit之后,只有各分支可见,其他分支看不见。但是继承主分支内容master。也就是说ye看得见master看不见yr,yr看得见master看不见ye。(都是本地的内容,远程还是只有master分支)
git checkout -b yr_1 :在yr分支上创建并切换分支。yr_1继承yr分支的内容。
git merge yr_1:将yr_1分支内容合并到当前分支yr,这样本地yr就有yr_1的内容了。
切换到master分支,合并ye和yr
这样master就有了ye,yr,yr_1的内容了。
git branch -d ye:删除分支,分支没有合并是不能-d删除要用-D。-D表示强制删除没有合并的分支。
以上都是本地操作,不涉及远端的操作。远端还是只有master分支。
git init是私有仓库,要想被别人使用,就要创建共享仓库。
添加远程主机:
git remote add origin git@gitee.com:shiqingqing/test.git origin 是取得远程主机的名称,默认使用ssh
推送主分支:
git push -u origin master -u将所有内容推送,origin 是远程主机名字,master要推送的分支。
删除远程主机:
git remote rm origin
远程仓库是隐式的,不会在硬盘显示。
git clone是不需要连接主机的,直接clone就可以。
git push -u origin dev_1 :推送 dev_1分支。
git pull origin dev_1:拉取远程主机dev_1分支和当前工作分支合并
git pull origin dev_1:dev_1:拉取远程主机dev_1分支到本地,不合并。拉取远程dev_1分支到本地,取名为dev_1。
不但拉取代码,还可以更新代码。
git push : 后面直接这样推送就可以。先add commit。
git pull : 更新代码
git fetch:跟pull差不多,如果有新的分支拉取到本地不会和本地分支合并。
.git的config文件:
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[remote "origin"]
url = https://gitee.com/SOFTWARE-DEV/pandora.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "dev"]
remote = origin
merge = refs/heads/dev
git push -u origin master:推送都要这样写,不要简写。推送之前要add commit。
git branch test1:本地创建test1分支
git branch -vv:查看本地分支和远程分支的关系
git branch --set-upstream test1 origin/master:本地test1分支和远程master建立关系。 origin 是取得远程主机的名称
git remote show origin :查看远程仓库的信息
git remote rename 原名 姓名:重命名远程仓库名字
git remote rm 远程仓库名:删除远程仓库
注册远程版本库
$git remote add 远程仓库名(我们一般使用origin) 仓库URL
git push -u [远程仓库名remote-name] [本地推送的分支名 local branch-name]
//推送本地仓库的所有分支到远程仓库上去
git push -u [远程仓库名remote-name] --all
git push origin master
把本地的master分支推送给了远程仓库origin,并且在远程仓库origin中创建了一个远程的master分支,远程的master分支和本地分支master关联
如何查看本地分支与远程分支的联系
git branch –vv
问题 如果本地有个master 和远程的 origin/master分支没有建立跟踪关联
需要使用
git branch --set-upstream master origin/origin
查看当前远程仓库
git remote –v
从远程仓库抓取数据
正如之前所看到的,可以用下面的命令从远程仓库抓取数据到本地:
$ git fetch 远程仓库名
远程仓库的分支合并
$ git merge 远程仓库名/分支名
$ git pull
相当于
$ git fetch
$git merge远程仓库名/分支名
远程分支的推送
git push -u [远程仓库名remote-name] [本地推送的分支名 local branch-name]
跟踪远程分支
git checkout –b [本地分支名] [远程仓库名]/[分支名]:老的命令
git branch --track [本地分支名] [远程仓库名]/[分支名]
注意这个是新建一个本地分支,然后跟踪关联远程分支,如果对已经存在的本地分支,关联某一个远程分支,请使用
git branch --set-upstream [本地分支名] [远程仓库名]/[分支名]