目次
1、安装与简介
1.1 安装
1.2 简介
2、本地堆栈
2.1 设置用户信息
2.2 创建本地堆栈
编辑
2.3 查看分支
2.4 查看堆栈状态
2.5 添加暂存区
2.6 提交本地堆栈
2.7 创建和切换分支
2.8 删除分支
2.9 合并分支
2.9.1 无冲突合并
2.9.2 冲突合并
2.9.3 特别环境
2.9.4 常规选择
2.9.5 Vim退出操纵
3、远程堆栈
3.1 克隆
3.2 拉取和推送
3.3 创建本地分支
4、举例常见场景
4.1 场景一
1、安装与简介
1.1 安装
点击官网安装包下载链接,选择操纵体系 ,我这里安装的是windows 64位的。
git安装包下载
下载后双击安装即可,没什么留意事项。 安装后,鼠标右键,到能下图两个选项,表现成功。
1.2 简介
这部分内容,想用通俗易懂的话,明白焦点名词的寄义,并理顺它们之间的关系。
- 工作区:编辑代码的地方(一般在自己电脑上),代码特指整个工程目次。
- 暂存区:一个中央索引区域,工作区内容有修改后,需要先手动添加至暂存区,该区会记录每一次变化内容,存储于.git目次中。
- 分支:每一个分支,都是一个独立的开辟线,允许并行工作。一般用于多个版本,或多人开辟,多个分支,各自在自己的分支上工作。
- 版本库:需将暂存区内容手动提交至版本库,也是位于.git目次下,版本库会包含全部分支,而在每一个分支下,又会存储提交的全部快照(每次从暂存区提交的内容)。
- 堆栈:包含工作区和版本库的整体结构,特指工程目次下全部问价+.git目次。
明白上述内容后,一样平常工作中,也会碰到本地分支/远程分支,大概本地堆栈/远程堆栈等概念。
- 本地堆栈:通俗明白,就是代码存储在你的本地机器上,与远程堆栈相对,可以通过网络与远程堆栈举行交互(如推送和拉取)。
- 远程堆栈: 代码存储在云端服务器上,可供大家共享与修改。
- 本地分支:是指本地堆栈中存在的分支。
- 远程分支:是指在远程堆栈中存在的分支。
此中,本地分支会以平凡名称表现,远程分支通常会以 remotes/origin/name情势表现。如下图,master就是本地分支,其余红色部分是远程分支。
2、本地堆栈
2.1 设置用户信息
本地利用git工具,可在初次设置用户信息。具体操纵:鼠标右键,选中打开Git Bash Here。
设置用户信息命令。
- # 设置用户名和邮箱
- git config --global user.name 用户名
- git config --global user.email 邮箱
- #示例
- git config --global user.name 小红
- git config --global user.email 996685qq@.com
复制代码 设置成功后,一般会在c/user目次下,新建一个.gitconfig文件,生存用户信息。如果找不到,就利用搜刮功能,我这的存放目次是C:\Users\Administrator\.gitconfig。
2.2 创建本地堆栈
在工程代码的主目次下,右键,选中打开Git Bash Here,键入初始化命令。
成功后,会生成一个.git目次,也会默认创建一个主分支master。
没看到.git目次,也不要慌,可能是目次被隐蔽了。点击查看->勾选上“隐蔽的项目”,即可看到。
如果想删除,刚初始化的git堆栈
- #在 Windows 系统上,打开命令行(cmd)并运行
- rmdir /s /q .git
- #在 Mac 或 Linux 系统上,打开终端并运行:
- rm -rf .git
复制代码 2.3 查看分支
查看全部分支,前面讲过,初始化时默认会创建一个主分支master。
- #查看所有分支
- git branch -a
- #查看远程分支
- git branch -r
复制代码 但这里,利用命令查看,什么都没有。为什么?先留一个牵挂。
2.4 查看堆栈状态
如下图所示,这里是初始化后默认生成的主分支master,且未举行任何操纵,而表现的状态。
查看堆栈状态,你会得到以下几个关键信息,以上图为例子,叙述阐明。
- 表现当前地点分支名称:on branch master(在master分支);
- 提交状态:No commit yet(未举行任何提交);
- 未跟踪文件:列出那些文件是尚未被跟踪的,如上图中红色字体。未添加到暂存区的文件,被称为“未跟踪文件”。
- 暂存区状态:表现那些文件已经被添加至暂存区,上图无,因为我们还没有手动执行任何操纵呢。
2.5 添加暂存区
- #添加部分文件到暂存区
- git add 文件名或文件夹名
- #示例
- git add Main.py Icon/
- #添加所有
- git add .
- #添加特定类型文件
- git add *.txt
- #对于永远不需要添加的文件,添加到.gitignore文件
- #创建文件,然后文件编辑,将不需要add的文件名填入其中,整个文件夹不添加记得加/ 如ceshi/
- touch .gitignore
- #只添加建立追踪的文件,即添加修改文件,不添加新增文件
- git add-u
- #撤销已经添加的文件
- git reset 文件名
复制代码 执行示例命令后,如下图,我添加了一个py文件和一个Icon文件夹。
再次执行查看堆栈状态,相较于第一次查看,多了一项 "Changes to be committed" ,直译过来就是提交前的改变,即暂存区内。
如许,绿色字体表现添加至暂存区。红色部分仍在工作区。
留意:添加到暂存区,并不等同于提交,所以还需手动提交至堆栈。
2.6 提交本地堆栈
留意:不能直接从工作区提交至本地堆栈,只能先添加到暂存区,在提交到本地堆栈。
- #提交至本地仓库
- git commit -m "提交信息说明,最好有意义,便于回溯" 暂存区文件名
- #提交所有,包括未暂存的(跟踪但未添加暂存)
- git commit -a -m "提交信息说明"
- #示例
- git commit -m “首次提交” Icon/
复制代码 着重解释下,加上-a命令后,会提交全部,包括未暂存的(跟踪但未添加暂存),什么意思?
举个例子,假设A文件,初次被添加至暂存区(已变成了跟踪文件),可是在厥后的操纵中,A文件在工作区被修改过,但并未将其手动添加,这种就称之为 未暂存文件。
这个例子阐明了,如下3点内容:
- 只要添加过暂存区,就变成了跟踪文件。
- 在工作区修改跟踪文件后,暂存区不会主动更新该文件,必须手动添加,暂存区才会记录修改内容。
- 提交所偶然,会将全部跟踪文件(暂存或未暂存的),先添加到暂存区,在提交。
执行示例命令后,如下图所示。
此时,执行查看全部分支,示例图如下,主分支master已经存在了。这里是为相识惑,之前初始化后,查看分支没有的疑问。我明白的是,分支上有提交内容后,才会表现。
master表现为绿色,且火线带有 * 号,表现你当前处于分支master,接下来全部操纵都是基于此分支举行的。
2.7 创建和切换分支
- # 创建新分支后,在切换到新分支
- git branch name
- git checkout name
- #创建新分支,且直接切换到该新分支
- git checkout -b name
- #示例
- git checkout -b 3.1
复制代码 执行示例代码后,再次查看全部分支,如下图。新分支3.1创建后,直接切换。分支名以绿色表现,且火线带*号,表现你当前所处分支3.1。
新建分支3.1,是基于主分支master创建的,所以内容并不为空,而是复制master中的全部内容。
如何去确认呢?这里可以利用,查看分支差异命令。
- #查看两个分支差异
- git diff name1..name2
- #示例
- git diff master..3.1
复制代码 执行示例命令后,无任何差异输出,再次验证了分支3.1是基于master创建的。
那是不是可以以为,每创建一个新分支,就是基于主分支的呢?
答案:不是的,我们可以做一个实行。
先在主分支上提交新内容,让主分支与分支3.1保持差别。然后切换到分支3.1后,在创建分支3.2,此时分别对比分支3.2与3.1,master的差异。会发现分支3.2与3.1无差异,这也就表明,创建新分支时,默认复制你当前所处分支内容。
- #切换到主分支master
- git checkout master
- #检查切换成功
- git branch -a
- #主分支二次提交
- git commit -m "二次提交" Main.py
- #查看主分支与3.1差异
- git diff master..3.1
- #切换到分支3.1
- git checkout 3.1
- #创建分支3.2
- git checkout -b 3.2
- #分别查看分支3.2与3.1,master之间的差异
- git diff 3.1..3.2
- git diff master..3.2
复制代码 windows下查看差异,碰到这种冒号:,之前键入 q ,即可退出。
2.8 删除分支
删除分支前,牢记,要先切换到其他分支,才气删除,否则报错。
- #先切换分支,在执行删除
- git checkout name1
- git branch -d name2
- #示例
- git checkout master
- git branch -d 3.1
复制代码 2.9 合并分支
将原分支(你修改的分支)合并到目标分支。
- #切换到目标分支
- git checkout target-branch
- #合并分支,将原分支ori-branch合并到目标分支target-branch
- git merge ori-branch
复制代码 插个题外话,如果主分支master更新了(如添加新内容),3.1分支(创建时直接复制master分支的内容)不做任何操纵,会主动更新吗?答案是不会的,需要手动更新(合并)。
2.9.1 无冲突合并
举例,在3.2分支上,添加和提交新文件untitled.ui,然后合并到分支3.1。
2.9.2 冲突合并
Git中较为常见的冲突,一般是指内容冲突。
- 同一文件的同一位置被差别分支修改。
- 同一文件的差别位置被差别分支分别举行了修改,这种是没有直接冲突的,Git会主动合并,但是大部分修改会导致代码行的位置变化。
这里照旧以举例子阐明,分别在master、3.1分支下,修改Mainform.py中第9行的代码,且两分支修改内容差别,执行合并。
效果如下图,提示主动合并失败,冲突文件为Mainform.py,此时需手动调整冲突再次提交效果。
2.9.3 特别环境
不知道大家有没有碰到如许的环境,在拉取主分支后,忘记切换到自己所属分支上了,然后就开始了创作(修改),比及提交的时间,发现自己竟然是在主分支上修改的。此时,既不想丢弃自己辛劳的创作,又想保持主分支干净(无任何修改痕迹)。所以,最好的效果,就是让修改内容提交到自己所属分支上,主分支保持原状。
以举例子方式,如果我在分支3.1下举行修改后,想同步合并到分支master上,但又不想提交至分支3.1(分支3.1保持未修改前状态)。
首先切换到3.1分支下,修改Mainform.py文件(添加一行代码)并生存后,直接利用命令切换至master分支,如下图,会提示Mainform.py文件有未提交的修改。
此时,已经成功切换到了master分支下,打开Mainform.py文件后,举行查抄,是修改后的样子。然后,就可以直接执行添加暂存区和提交。
上述操纵执行成功后,你在3.1分支上的修改内容,就同步提交到了分支master上。最后,不放心的,可以切换到分支3.1上,查抄下修改内容是否提交到3.1上了,因为咱们没有在分支3.1上操纵,所以就不会。
2.9.4 常规选择
我们在某一分支上举行创作后,通常,你可以有三种选择:
1、 提交更改:切换到分支3.1后,执行添加暂存区和提交操纵(git add / git commit)。
2、 放弃更改:切换到分支3.1后,执行放弃更改命令 git checkout --Mainform.py。
3、 暂存更改:如果你不想现在提交,可以利用Git暂存功能,等用时在规复暂存。
第3中方式,差别于上述两种,无需先切换到分支3.1下,它在任何一分支下(前提是分支下有该文件),执行均有效。
照旧以例子阐明,我是直接在master分支下执行暂存,效果如下图所示。
执行后,会发现master分支下的修改消失了,3.1分支下的修改也消失了。然后,我尝试在3.1分支下,执行暂存,最终是同样的效果。
此外,我尝试了,在master分支下执行暂存,在3.1分支下执行规复暂存,惊奇地发现两个分支下的修改同时消失,也同时规复了。
我怀疑暂存和规复功能,无需区分分支,是一个统一的动作。感兴趣的小伙伴可以尝试。
- #查看更改
- git diff 文件名
- #暂存更改
- git stash
- #恢复暂存
- git stash pop
- #放弃更改
- git checkout --文件名
复制代码 2.9.5 Vim退出操纵
操纵过程中,如果碰到了如下的vim编辑界面,不知道怎么操纵,看过来。
如下图所示,按 Esc 键,然后键入 :wq 来生存并退出。
另有碰见这种环境的,如下图所示,键入 q 字母即可退出。
3、远程堆栈
在我们工作时,通常利用的是公司远程堆栈,即一台云端服务器,不允许在上面开辟,只存储代码。大家协同工作时,每个人都要先从远程堆栈中克隆代码。
3.1 克隆
仍旧是在你想存放代码的主目次下,右键->open Git Bash Here,键入克隆指令。
克隆成功后,主目次下会自带.git目次。
查看全部分支,本地分支以分支名表现,远程分支通常以remotes/origin/分支名表现。
这个master本地分支,其实不是我们人为创建的。而是,在克隆远程堆栈时,Git会主动为你创建一个本地分支,通常复制的是远程主分支master或main,具体取决于远程堆栈的默认分支设置。
3.2 拉取和推送
克隆后,默认创建的本地分支master会与远程分支remotes/origin/master创建跟踪关系。
此时,可以利用简朴的拉取(从remotes/origin/master拉取最新代码到本地)和推送(将本地master修改内容推送到远端)命令。
如果本地分支,并没有与远程分支创建跟踪关系,在拉取和推送时,需注明远程分支名称。
- git pull remotes/origin/master
- git push remotes/origin/master
复制代码 3.3 创建本地分支
克隆成功后,本地分支通常与远程堆栈的主分支创建跟踪关系,在本地举行开辟后,可能会不小心推送到远程,粉碎了主分支,就会影响到别人。
这种环境,发起在远程堆栈中,创建一个独属你的分支own。进而在本地,创建一个新分支,是基于远程堆栈中独属你的分支owm。如许,你在本地任何开辟,一不小心推送到远程,也不用担心,毕竟也影响不到别人。
- #基于远程分支创建本地分支,并切换
- git checkout -b branch_name remote/origin/name
复制代码 基于远程分支9.1,新建了一个本地分支9.1,这两个分支是创建了跟踪关系的。
跟踪关系具有通报性?不具备,需手动添加。
如果新建一个本地分支9.2,是基于本地分支9.1创建的。因为本地分支9.1 与远程分支9.1创建了跟踪关系的,那本地分支9.2会不会与远程分支9.1创建跟踪关系呢?
答案是不会的,需要自己手动添加。
4、举例常见场景
4.1 场景一
如果你在本地写了一版代码,想上传到公司服务器上某个堆栈(已有),并创建一个新的分支。
- #进入工程目录下,初始化
- git init
- git add .
- git commit -m 'init commit'
- #关联远程仓库
- git remote add origin 远程仓库名
- git checkout -b dev_name
- #推送分支 -u关联远程分支,这里会自动创建新的远程分支
- git push -u origin dev_name
- #附加一种特殊操作,强制覆盖远程分支内容
- git push -f origin dev_name
复制代码
以上内容,纯属自己所想所写,如有不对,欢迎评论区更正!!!
以后如有新想法,会持续更新!!!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
|