Git

基本概念

--git是一款免费、开源的分布式版本控制系统,管理软件的版本,版本库中的版本是以提交的形式保存,一次提交的覆盖范围是整个项目

--优点

工作流上的灵活性-->主要是单一开发可使用,敏捷团队也可使用

高性能-->处理项目速度快

强大的抗故障和抗攻击能力

离线开发和多点开发

强大的开源社区

可扩展性-->主要提供很多实用命令

--工作流是相关项目的日常操作规程

--git命令行适用于所有的平台

--Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件

版本库

--版本库本质是一个高效的数据存储结构而已,由文件、目录和版本组成

--所有的数据,根据文件、作者和日期会被计算为一个16进制的散列值(40个字符),一个提交对象的散列值实际上就是"版本号";若该版本号存在于版本库中,则可将其恢复到当前工作区相应目录中,若不存在,也可从其他版本库中导入

--高性能;通过散列值来访问数据是非常快的

--冗余度-释放存储空间:相同文件的内容只需存储一次

--分布式版本号:可离线产生版本号

--版本库中间高效同步/数据完整性/自动重命名检测

--git 中只能对整个项目进行版本化

--工作区是一个包含.git子目录的目录,存放项目历史是版本库

常用命令

--创建版本库,存储该项目本身及历史

cd /projection git init -->创建.git目录,在其中创建一个版本库,历史存储在这里

git clone /projection  /projection-clone  本地到本地

git clone https://github.systems.com/mobile/mobile-ios.git ~/IdeaProjects/mobile-ios 远程到本地

-->把已存在的版本库克隆过来

--首次提交, 项目的一个版本称为一次提交

git add foo.txt bar.txt 添加到暂存区 git commit --message "Sample project imported" 提交到本地版本库,并赋予该提交一个散列值标识这次提交

git status 检查状态,显示该项目自上次提交以来所发生的所有修改

(1)changes to be comitted 已修改且注册到暂存区,待commit

(2)changed but not updated 已修改但未被注册到暂存区,待add

(3)untracked files 新增的文件

git diff foo.txt 显示每个被修改的行

(1)git diff 暂存区和工作区的不同之处

(2)git diff --staged 当前版本库中head提交与暂存区的不同之处

git log 显示项目提交的历史,按时间降序排列

--提交修改 也是先add 再commit

git add --all 所有的修改存储到暂存区 git commit 提交到本地版本库

--从任意版本库中取回修改pull

pull命令:取回修改 cd /projections/first-steps-clone git pull /projections/first-steps-bare.git master

--push将提交传送给其他版本库

cd /projection git push /projections/first-steps-bare.git master

“git push -f”强制推上去

--注意:当版本库有更新时,先pull取回其他人的更新,在本地合并提交后再push

--git中,恢复到某一版本通常称之为检出checkout

git checkout release1.1

git checkout 657a9300ed375a7e6bbb8643fa4ea08de96cf8a9(提交散列值)

--比较两次提交之间的差异

git diff 77d231f HEAD git diff 77d231f 05bcfd1 - book/biisection

--从暂存区中撤回修改,reset命令可用来重置暂存区

git reset HEAD blan.txt 将blan.txt移出暂存区

git reset HEAD 重置为当前HEAD版本

git reset --hard 39ea21a 重置分支指针(分支指针主要用于指向当前活动分支,每次提交时移动到最新提交上),重置工作区和暂存区到提交39ea21a的状态

HEAD 是当前分支引用的指针,它总是指向某次commit,默认是上一次的commit,这表示 HEAD 将是下一次提交的父结点

git 中的分支,其实本质上仅仅是个指向 commit 对象的可变指针,HEAD 特别指针是一个指向你正在工作中的本地分支的指针,可以将 HEAD 想象为当前分支的别名

--用.gitignore忽略非版本控制文件

--stash命令将工作区和暂存区中的修改保存在储藏栈的缓存区中 git stash stash pop命令所储藏的修改恢复到工作区 git stash pop 查看当前储藏内容 git stash list

--分支

为当前提交创建分支 git branch a-branch

切换分支 git checkout a-branch 强制切换 git checkout --force a-branch

创建并切换到新分支  git branch -b a-branch

列出当前所有分支 git branch

从远程版本库取回feature-a分支,且在本地命名为feature-a分支  git pull /mobile-ios.git feature-a : feature-a

删除本地分支 git branch -d feature-a

删除远程版本库分支 git push /mobile-ios  : feature-a

merge命令进行分支合并,然后git会基于合并的内容来自动创建一次新的提交

> # on the branch "master" > git merge feature

merge命令能自动对分支进行合并,在合并过程中,若发生冲突,先解决冲突再手动创建提交

pull=fetch + merge 从远程版本库中导入新的提交,然后在必要情况下将他们合并到当前分支上

gc(垃圾回收)命令用于清理版本库,移除所有不属于当前分支的提交对象

idea

--提交自己项目前必须进行更新(特别重要),pull进行更新代码

--红色--表示新创建,未add (add-->commit file) 绿色--表示新创建后add (commit file) 蓝色--表示原已提交过但后来已修改,未提交 (commit file) 白色--表示已提交

--commit Directory操作针对整个项目目录

若项目中存在待提交的文件(绿色/蓝色),可进行相应勾选,填写commit message,下拉菜单中选择commit and push

若项目中不存在待提交的文件,直接push

提交失败,意味着本地项目没更新,和远程版本库有冲突,需解决冲突(先pull更新,与本地代码合并提交后,再push)

恢复之前版本的两种方法:revert与reset的区别

https://blog.csdn.net/yxlshk/article/details/79944535?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase

reset(回退)

如果想恢复到之前某个提交的版本,且那个版本之后提交的版本我们都不要了,就可以用这种方法; reset后,head指向该恢复的版本

“git reset --hard 目标版本号”命令将版本回退,再用“git log”查看版本信息,此时本地的HEAD已经指向之前的版本

revert(反做)

如果我们想撤销之前的某一版本,但是又想保留该目标版本后面的版本,记录下这整个版本变动流程,就可以用这种方法,revert之后,生成了一个新版本; Head指向该新版本

使用“git revert -n 版本号”反做,并使用“git commit -m 版本名”提交

local history: 根据提交时间点revert

Addition:

1.远程仓库名字 “origin” 与分支名字 “master” 一样,在 Git 中并没有任何特别的含义一样。 同时“master”是当你运行git init时默认的起始分支名字,原因仅仅是它的广泛使用,“origin” 是当你运行 git clone 时默认的远程仓库名字。 如果你运行 git clone -o booyah,那么你默认的远程分支名字将会是 booyah/master

本地分支提交到远程

—git push origin AMH_Panda_mAuth_RecoverProfile_common

2.查看远程仓库 

 git remote -v

从远程的origin仓库的master分支下载到本地,并新建一个yanzi分支

 git fetch origin master:yanzi

查看yanzi分支与本地原有分支的不同

 git diff hanzi

将yanzi分支和本地当前分支合并

 git merge yanzi

3.删除

删除本地分支 git branch -d feature-a

删除远程版本库分支 git push origin  : feature-a

仅删除远程分支文件,不删除本地文件

 git rm —cached filename / git rm -r —cached directoryname

 git commit  -m “delete remote file or directory”

 git push -u origin master(此处是当前分支的名字)

同时删除本地文件和远程分支文件

 git rm filename / git rm -r directoryname

 git commit  -m “delete remote file or directory”

 git push -u origin master(此处是当前分支的名字)

4.标签tag标识软件版本,给某次提交打上tag,用于识别提交散列值

 创建一个tag

 为master分支当前版本创建一个1.2.3.4标签,并将其注释为“first tag”   git tag 1.2.3.4 master -m “first tag”  

 推送标签  git push origin 1.2.3.4  /  git push --tags 

 显示标签  git tag    /    git tag -l 1.2.*

 同时打印标签的散列值和提交对象的散列值    git show-ref --dereference —tags

posted @ 2022-01-14 15:58  meiyouyou  阅读(83)  评论(0编辑  收藏  举报