linux学习记录(git) 10.9 ~ 10.10

知识点:

git-版本管理工具,一个树的结构来维护所有历史版本,可持久化,支持多人合作

(红)工作区:仓库的目录。工作区是独立于各个分支的。 =》 (绿)暂存区:工作区写入版本库前的缓存区 =》 版本库:将所有版本用一棵树的形式存下来

每次head只会处于一个结点,

要将当前暂存区存到版本库里的时候,就会在当前链表的后面插入一个新的结点,然后将暂存区里的内容,放到新的结点里面,同时head往后移一位

 

git config –global user.name xxx = 设置全局用户名,信息记录在~/.gitconfig文件中
git config –global user.email xxx@xxx.com = 设置全局邮箱地址,信息记录在~/.gitconfig文件中

 

mkdir project

进入peoject 然后 get init = 将当前目录配置成git仓库

 

git status  = 查看当前仓库状态

get add = 将文件加到暂存区里

get commit -m “add readme.txt” = 将暂存区里的内容提交到当前分支 -m 后面加的是备注

 

git diff readme.txt = 一般用于刚在工作区修改,还没有git add修改到暂存区,此时比较工作区修改和暂存区的区别,暂存区没有内容,会和HEAD所指比较

(比较已经写入暂存区和已经在工作区被修改但未写入暂存区的区别,暂存区没有内容,就是和HEAD所指比较)

git restore readme.txt = 一般用于在工作区修改了,但还没有git add修改到暂存区,撤销工作区的更改,回滚到暂存区存的内容

(将工作区的内容撤销更改,回滚到暂存区存的内容,如果暂存区没内容,就回滚到HEAD指向内容)

git restore –staged readme.txt =  一般用于在工作区修改了,已经git add修改到暂存区了(暂存区被更改),撤销掉暂存区内容(暂存区会直接没内容了),但工作区文件内容并不变

(把暂存区的文件内容撤销,但原工作区不更改,–staged表示只更改暂存区)

比如:readme.txt一开始内容111,在工作区,git add,到暂存区,然后git commit到版本库HEAD所指分支上(HEAD上现在是111),现在修改readme.txt为111 222(工作区),git add修改到暂存区(暂存区当前 111 222),然后git restore –staged readme.txt ,将111 222版本从暂存区撤出(撤销暂存区修改,暂存区现在没有内容),并且不更改工作区readme.txt文件的111 222版本,git diff,是和HEAD上的111比较,发现显示多了一行222

 

***git restore –staged readme.txt 《=》 git rm –cache readme.txt

小区别:rm对于当前文件不想管理了(不追踪了),git restore –staged 还想管理文件,只是从暂存区拿出来

 

git log –pretty=oneline查看当前从最初起点走到当前HEAD的路径,查看当前分支的所有版本

 

切换成之前的状态(回滚):

git reset –hard HEAD^ 或者:git reset –hard HEAD~

一个^回滚一个版本

回滚不会删掉内容

 

回退回来?

git reflog = 显示所有HEAD的移动记录

可以找到每个版本的哈希值编号-版本号(前七个字母)

然后

git reset –hard 版本号 = 回滚到特定版本

并且将当前目录下存储的文件恢复到某状态

 

恢复文件

在工作区修改,但没git add到暂存区,不想修改了,想恢复

git restore readme.txt 

其实就是将工作区最新修改撤销掉,回滚到暂存区存的内容,如果暂存区没内容,就回滚到HEAD指向内容

git restore –staged readme.txt

将暂存区删掉,工作区不变

 

当前分支叫主分支,master

commit 是将暂存区可持久化

可以只commit一部分文件

删文件也可以放到暂存区

 

本地仓库存到远程

git remote add origin git@git.acwing.com:tkw/project.git = 将本地仓库关联到远程仓库

git = 用户名

git.acwing.com = ip地址

tkw/project.git = 文件夹

当前project目录(本地仓库),映射到了git.acwing.com:tkw/project.git这个目录

 

git push -u origin master 推送当前分支(master)

git clone git@git.acwing.com:tkw/project.git 从远程仓库下载到当前目录下(换服务器时候,把项目迁移到新的服务器上)

 

创建分支:

git checkout -b +name = 创建一个新的分支并切换到当前分支

git checkout master = 切换到master分支

git branch = 查看所有分支和当前所处分支

git branch +name = 创建一个新的分支

git branch -d +name = 删除一个分支

暂存区和分支没关系,完全独立,不会因为有多个分支就有多个暂存区

git commit 是可持久化到当前分支后面

git merge dev(分支名)= 将某分支合并到当前结点上

合并时候不一定完美合并,可能有冲突

 

git push 将本地内容提交到云端 -u第一次要加

push的时候,如果云端没有分支,就需要在云端创建这个分支

git push –set-upstream origin dev3(分支名)

云端分支和本地分支比较独立,云端分支被删,本地不一定被删,本地分支被删,云端也不一定被删

git push -d origin dev3(分支名)  = 删除云端的分支

git branch –set-upstream-to=origin/dev4 dev4 = 将云端分支和本地分支绑定到一块

git pull = 将云端内容拉下来同步到本地,并与当前所处分支合并(有相同分支时/有对应分支)

git fetch = 从远程分支拉取代码,git fetch + git merge = git pull

git pull origin dev5  = 连带云端的分支+内容一起拉到本地并合并到当前分支(没有对应分支)

 

***小结:本地分支合并本地分支:git merge 本地合并云端分支:git pull(本地和云端有对应分支时) git pull origin 分支名 (不管本地和云端有没有对应分支)

本地上传到云端:git push(本地和云端有对应分支) git push –set-upstream origin 分支名 (本地和云端没有对应分支)

 

stash概念:

存储所有历史上没有被可持久化(commit)的修改

git stash = 将当前修改(工作区和暂存区)存到一个栈里

(在修改的时候,突然服务器崩了,我们不想commit修改,可以先把修改存到一个栈里)

git stash list = 查看当前栈中内容

git stash pop = 弹出栈中内容

 

 

多人合作,在不同服务器下 :

两个人都 git push 一个版本上去,第二个人发现有冲突,要先 git pull 从云端拉下来,然后解决冲突,再 git push 上去

(现实一般没有冲突,因为两人一般写的是不同文件)

 

本地删仓库:

rm project -rf

 

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...