Git

概述

(1) git是一个版本迭代管理和多人协作的工具
(2) 本地git: 工作区(本地文件夹、本地仓库) 缓存区 版本库(持久化缓存区,树的形式,每个节点代表一个版本,head指针,可能存在分支)
(3)head指针的用法:当每次commit持久化一个版本时,会在head指针后面创建一个结点,将信息存入结点,head指针后移

命令

本地git

(1)设定本地用户名和邮箱
git config --global user.name xxx git config --global user.email xxx
信息会存放在.gitconfig文件中
(2)将当前文件夹创建为git本地仓库 git init
隐藏信息存在.git文件夹中
————初始化工作已完成,下面在项目中创建readme.md文件——————
3)查看当前git缓存区状态 git status
Untracked files:表示最初在本地修改了但没有加入到缓存区
Changes not staged for commit:表示对版本库中的文件修改却还没有加入缓存区
(4)将修改加入缓存区 git add xxx 或者 git add .(全部加入)
Changes to be committed:表示加入缓存区但还没有持久化
(5)将缓存区持久化到版本库 git commit -m ""
当commit之后缓存区会清空
commit持久化===新加一个结点,并用head指针指向
(6)将修改从缓存区中删除——(4)的逆操作 git restore --staged
注意:git rm --cached 是将该修改完全删除,效果是将版本库中该文件删除同时工作区中版本处于最初未提交状态,二者的最大区别在于restore只是将修改从缓存区中取出,rm是重新管理文件(也可以不管)
(7)比较工作区与版本库某个文件的差异,如果存在缓存区,则会比较工作区和缓存区 git diff
(8)查看从根节点到head结点的所有结点(版本)信息 git log
从下往上看即可看到每个版本提交信息和编号(哈希值的前七位)
(9)查看head指针的结点移动情况 git reflog
防止head指针回滚导致之前结果编号的丢失
(10)head指针回滚————会带来本地文件变动的效果
git reset --hard 版本号
git reset --hard HEAD^ 回滚一次
(11)工作区回滚到上一个历史版本,如果存在缓存区,则会回滚到缓存区,否则为head指针指向的版本库 git restore

用法:在本地git工作区编辑时,如果当前编辑有价值,可以放在缓存区里,如果当前编辑不太行时就可以回滚到缓存区中,如果缓存区中没有则直接到版本库中上一个版本
对于修改操作,即使暂存区中有内容,但是不是对应于这个文件的,也可回滚到版本库,例如
当a.txt和b.txt的文件添加修改已经加入到head版本库,则rm a.txt b.txt git add . git restore --staged a.txt git restore a.txt或者直接rm a.txt b.txt git restore a.txt b.txt


$\color{Red}{重点会用在本地编辑时从缓存区或者从head所指的版本库回滚(第11点)以及head指针的回滚(第10点)}$

本地与云端的结合

前提:在github等平台创建远程仓库,然后将本地ssh公钥复制到平台上实现免密登录

(1)本地目录和远程目录的对应
git remote add origin git@github.com:XLY-ynu/project.git
表示origin为远程名称,git@github.com为ssh服务器中用户名@域名格式,XLY-ynu/project.git为云服务器下的文件夹
(2)将当前分支对应到远程的master上 git push -u origin master
注意:
1. 第一次写完整(第一次包括创建并对应(pull不可以对应)远程分支),之后可以直接git push
2. 在云端可以看到所有版本历史,对应于最新head结点的log路径
3. 在云端可以根据提交的message具体浏览修改,同时查看当时的文件
4. 此时使用git status命令会额外多出与云端(origin)的更新信息:Your branch is ahead of ‘origin/master’ by 4 commits.
(3)在另外一台新服务器上(完全没有当前文件夹的情况下)同步 git clone (服务器上的ssh克隆地址)
但是:
(1)使用此方式只是将保存在云端的所有历史版本(最新head的log结点)保存下来,但reflog本地移动记录没有
(2)新服务器上也要实现和github云端的ssh授权

引入分支

(1)在当前结点创建并切换分支(只是一个趋势,需要commit才有结点)git checkout -b branch_name
作用:
1. 当前分支继承master分支,内容一样
2. 可根据实际需求reset到任意一个结点上
(2)查看所有分支及当前所在分支 git branch
注意:
1. 所有分支和master共用一个暂存区,只是commit会在当前分支的后面创建一个结点
2. 如果在dev分支进行了修改并add到暂存区之后没有进行commit,而是直接切换到master分支,由于共用一个暂存区,因此master分支本地也会进行相应的修改,暂存区不变,如果要恢复只能回滚到版本库
(3)切换分支(head指针变化) git checkout branch_name
(4)将某个分支的最新版本合并到当前分支的head结点上 git merge branch_name
注意:
1. 合并分支会将某个分支最新版本的log(路径上的message也会复制)也复制过来
2. 合并冲突:如果产生分支的结点在当前分支的后面依然有结点并且与另一个分支内容不一致,则将另一个分支的最新结点合并过来时会和后面这一结点产生冲突,此时系统会自动将两个文件的内容合并,并修改到该两个文件上,需要手动修改这两个文件并commit持久化
(5)删除本地分支 git branch -d branch_name
切换到其它分支才能删除
(6)提交当前分支(远程已经存在) git push
注意:
1. 如果还没有对应远程分支(远程分支不存在),可以使用git push -u origin branch_name创建远程分支并对应
2. 云端分支和本地对应的分支正常情况下是独立的,删除本地的远程不会受影响
3. 远程分支和本地分支名称最好一致,否则git不知道push到哪个分支
(7)删除远程分支 git push -d origin branch_name
(8)将远程某个分支拉到本地(本地没有该分支)
首先必须单独在本地上创建个对应的分支,使用(1)命令;
git branch --set-upstream-to=origin/branch_name1 branch_name2将云端分支与本地相对应
对应之后可以直接git pull
注意:
1. 第二三步不可以直接用git pull origin branch_name代替,虽然能实现相同效果,但是没有对应,之后不能直接git pull,不方便
2. 但是由于git pull命令有将远程分支合并本地分支的效果,可以临时使用git pull origin branch_name将远程合并到当前分支,例如本地为aa,bb;远程为aa,bb,cc,可以直接覆盖本地

分支合并操作的总结:本地merge本地,本地push远程,远程pull本地

Git重点掌握本地和远程分支的两种对应方式(本地有分支远程没有、远程有本地没有)
以及对应之后的操作(直接push pull)
还有本地对新分支的操作(创建 删除 切换 合并)





文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇