1. 如何使用git从主仓库更新数据到分支中
首先把主仓库个更新git pull从主仓库创建一个临时分支git branch tmp切换到你的分支上去git checkout 你的分支把临时分支merge过来就好了git merge tmp如果出现冲突解决一下就好了。
2. Git分支,为何以及如何使用分支
几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。在很多版本控制系统中,这是个昂贵的过程,常常需要创建一个源代码目录的完整副本,对大型项目来说会花费很长时间。
有人把 Git 的分支模型称为“必杀技特性”,而正是因为它,将 Git 从版本控制系统家族里区分出来。Git 有何特别之处呢?Git 的分支可谓是难以置信的轻量级,它的新建操作几乎可以在瞬间完成,并且在不同分支间切换起来也差不多一样快。和许多其他版本控制系统不同,Git 鼓励在工作流程中频繁使用分支与合并,哪怕一天之内进行许多次都没有关系。理解分支的概念并熟练运用后,你才会意识到为什么 Git 是一个如此强大而独特的工具,并从此真正改变你的开发方式。
为了理解 Git 分支的实现方式,我们需要回顾一下 Git 是如何储存数据的。或许你还记得第一章的内容,Git 保存的不是文件差异或者变化量,而只是一系列文件快照。
在 Git 中提交时,会保存一个提交(commit)对象,该对象包含一个指向暂存内容快照的指针,包含本次提交的作者等相关附属信息,包含零个或多个指向该提交对 象的父对象指针:首次提交是没有直接祖先的,普通提交有一个祖先,由两个或多个分支合并产生的提交则有多个祖先。
为直观起见,我们假设在工作目录中有三个文件,准备将它们暂存后提交。暂存操作会对每一个文件计算校验和(即第一章中提到的 SHA-1 哈希字串),然后把当前版本的文件快照保存到 Git 仓库中(Git 使用 blob 类型的对象存储这些快照),并将校验和加入暂存区域:
$ git add README test.rb LICENSE$ git commit -m 'initial commit of my project'
当使用git commit新建一个提交对象前,Git 会先计算每一个子目录(本例中就是项目根目录)的校验和,然后在 Git 仓库中将这些目录保存为树(tree)对象。之后 Git 创建的提交对象,除了包含相关提交信息以外,还包含着指向这个树对象(项目根目录)的指针,如此它就可以在将来需要的时候,重现此次快照的内容了。
现在,Git 仓库中有五个对象:三个表示文件快照内容的 blob 对象;一个记录着目录树内容及其中各个文件对应 blob 对象索引的 tree 对象;以及一个包含指向 tree 对象(根目录)的索引和其他提交信息元数据的 commit 对象。概念上来说,仓库中的各个对象保存的数据和相互关系看起来如图 3-1 所示:
图 3-8. HEAD 在一次 checkout 之后移动到了另一个分支
这条命令做了两件事。它把 HEAD 指针移回到 master 分支,并把工作目录中的文件换成了 master 分支所指向的快照内容。也就是说,现在开始所做的改动,将始于本项目中一个较老的版本。它的主要作用是将 testing 分支里作出的修改暂时取消,这样你就可以向另一个方向进行开发。
3. 【学了就忘】Git分支 — 44.分支切换的几种情况
这个案例我们要对切换分支命令进行详细说明。
在我们切换分支,执行 git checkout master 这条命令的时候,
Git做了如下两件事情:
也就是说: 分支切换会改变你工作目录中的文件 。
说明: 在切换分支时,一定要注意你工作目录里的文件会被改变。如果是切换到一个较旧的分支,你的工作目录会恢复到该分支最后一次提交时的样子。如果Git不能干净利落地完成这个任务,它将禁止切换分支。
下面我们就来详细的进行说明。
1)查看工作目录中的状态
2)新建一个testing分支,并提交一个a.txt文件到版本库
3)查看 testing 分支的文件
4)切换到master分支
如上就可以证明了,切换分支时,工作目录中的文件会发生改变。
如果切换分支的时候,该分支的工作目录不是已提交状态,那么会出现如下两种情况。
也就是有以修改或新增,未被追踪的文件。
1)切换到 testing 分支
2)在 testing 分支新增一个文件 b.txt ,但不添加到暂存区
显示 b.txt 文件未被追踪。
3)此时切换到 master 分支上
我们从上面可以看到,在 testing 分支上创建的,新增未被追踪的 b.txt 文件,被同步到了 master 分支上。
因为 git checkout 命令执行时,会将工作目录里的文件改变到指定的提交状态。
又因为你在 testing 分支上创建的 b.txt 文件,既没有被提交也没有被暂存,说明 b.txt 文件还未被Git管理。在这种情况下,你进行切换分支操作,你将丢失在 testing 分支对 b.txt 文件编写。Git认为这样是非常不安全的操作,会默认的把该状态的文件,一起带入所切换到的分支中。
所以 git checkout 命令还是很智能的,可以我们一般不会用该功能,这个功能用来会非常的混乱,可能会污染到其他分支,尽管Git是好意。
也就是暂存区有新增的文件时,但还未提交到本地版本库。
(接上面示例,继续演示)
1)切换到 testing 分支上,把b.txt文件添加到暂存区
2)此时切换到 master 分支上
发现暂存区中存储的文件,只要未被提交,也会随着分支的切换,加入到其他分支中。
(接上面示例,继续演示)
1)切换到 testing 分支上,把 b.txt 文件提交到版本库
2)继续修改 b.txt 文件,不提交到版本库中,然后切换到master分支
说明:
error: Your local changes to the following files would be overwritten by checkout:b.txt
错误提示: b.txt 文件在本地的更改,将随着切换分支的操作,被版本库所覆盖(也就是文件被还原)
Please commit your changes or stash them before you switch branches.
提示你,在切换分支之前,请先提交更改。(不提交不让你切换分支)
这是什么原因?
因为 b.txt 文件已经被Git管理过了,如果 b.txt 文件还处于修改未追踪状态,你就必须 b.txt 文件修改完成并提交后,再去其他分支工作。
使用 git checkout 命令进行分支的切换,实际上有三个地方更改了
而切换分支的最佳实践:每次切换分支前,确保当前分支一定得是干净的(已提交状态)。
因为要避免一下情况:
在切换分支时,如果当前分支上有新增且未暂存的修改(第一次),或者有新增,暂存,但未提交的修改(第一次)时,分支可以切换成功,但是这种操作可能会污染其地分叉。
4. [email protected]当中怎么把一个分支的内容完全替换成另一个分支的内容
用git rebase可以选择多个提交merge。 用git merge可以一次性全部merge。
5. 如何只克隆git仓库中的一个分支
1、去mysgit官网下载软件,windows的在页面上方直接点击download进行下载即可
2、修改配置
git config –global user.name
git config –global user.email
如:
git config –global user.name "zbx"
git config –global user.email "[email protected]"
3、进入到想要放项目的目录,本例中gitdata目录就是我放项目的目录
克隆远程项目 git clone
如: git clone http://XXX.XXX/sq-group/XXX.git
克隆完成之后,可以看见项目名称,进去项目之后,可以看见一些git相关文件
4、查看远程分支:git branch -r
5、建立本地对应分支
git checkout –track 或者 git checkout -b
如:
git checkout –track origin/dev-zhengqigit ,
git checkout -b dev-zhengqi origin/dev-zhengqi
6、建立分支后,默认会进到新建的分支里,如果想进去其他分支,可以通过
git checkout 加分支名切换
如:
git checkout zhengqi
6. 如何在Git中将特定提交从一个分支合并到另一个分支
1,从已有的分支创建新的分支(如从master分支),创建一个dev分支git checkout -b dev2,创建完可以查看一下,分支已经切换到内devgit branch* devmaster3.建立本地到上游容(远端)仓的链接 –这样代码才能提交上去git branch –set-upstream-to=origin/dev 取消对master的跟踪git branch –unset-upstream master
7. 如何把Git的某个commit提交到指定的本地分支和远程分支
Git的分支合并主要依赖于checkout命令和cherry-pick 命令。cherry-pick就是从不同的分支中捡出一个单独的commit,并把它和你当前的分支合并。如果你以并行方式在处理两个或以上分支,你可能会发现一个在全部分支中都有的bug,如果你在一个分支中解决了它,你可以使用cherry-pick命令把它commit到其它分支上去,而不会弄乱其他的文件或commit。
1.例子:如我的Git文件在H:盘下,/h/myfirstproject,该目录中有三个分支:test分支,newbranch1分支和mater分支。如果想把test分支的某个commit合并到master,需要经过下面的步骤:
执行git log -3 –graph test,查看test分支下的commit: 注:commit 后面的hash值代表某个commit,这里把”“这个commit提交到master。
执行git checkout master,切换到master分支。
执行 git cherry-pick,该commit便被提交到了master分支。
到此,”“这个commit便被提交到了master分支。
2.例子:把本地的test分支的某个commit提交到远程testdevelop分支。
从远程分支checkout出来的本地分支,称为跟踪分支(tracking branch)。跟踪分支是一种和远程分支有直接联系的本地分支。在跟踪分支里输入Gitpush,Git 会自行推断应该向哪个服务器的哪个分支推送数据。反过来,在这些分支里运行git pull会获取所有远程索引,并把它们的数据都合并到本地分支中来。
在克隆仓库时,Git 通常会自动创建一个名为master的分支来跟踪origin/master。这正是git push和git pull一开始就能正常工作的原因。当然,你可以随心所欲地设定为其它跟踪分支,比如origin上除了master之外的其它分支。刚才我们已经看到了这样的一个例子:git checkout -b [分支名] [远程名]/[分支名]。
1.首先新建一个临时分支,并把临时分支与远程分支关联。
git checkout -b tempbarch –track origin/testdevelop
2.此时已经切换到了tempbarch分支。再执行:git log -3 –graph test,查看test分支下的commit:
3.执行git cherry-pick 即可把”“这个commit提交到tempbranch分支。
然后再通过Tortoise客户端的push命令,即可把该commit提交到远程testdevelop分支。
4.切换到任何非tempbranch分支,如master分支,执行git branch -d tempbranch,即可把tempbranch分支删除掉。
8. phpstorm使用git怎么切换分支
首先从github源检出我们的代码。首次可以要输入帐号,密码,并多次确认,一路确定就行了,就不一专一截图演示属了。然后说到更代码,我们必须了解github与svn稍微有点点不一样,做了提交(commit)只是提交到了本地的,并没有推送到服务器。这个机制,大家可以参考官方文档。更新就不说啦,说怎么提交代码:新建一个文件然后问是否加入到git中,当然是啦。不过有些文件是不是的,在后面说。如此新建的文件就会变成绿色。然后点击这两个按钮就行,在svn里面,这样就算提交到服务器了,但是git不同。然后需要再执行一步push。右键左侧的项目栏,然后如图依次操作即可。或者点击导航栏的“vcs”一样可以找到同样的命令操作。6好啦,这样基本的操作就完成了,当然,大家可以新建一个.gitingore文件来排除需要上传的文件,然后也不要将此文件加入到git中。点击底部的“version contorl”可以看到每次操作的命令,点击“changes”可以看见代码变更的历史历程。
9. Git分支怎么切换到远端分支
(一).创建本地分支
git checkout -b新分支名。
执行该指令后,会在本地创建一个新分支,该分支是从当前分支上检出的,所以所有文件内容都和当前分支一模一样,这是正常的。创建成功后,将自动切换至新分支上。
比如我要创建一个名为dev1的新分支:
三、将远程git仓库里的指定分支拉取到本地(本地不存在的分支)
当我想从远程仓库里拉取一条本地不存在的分支时。
git checkout -b本地分支名origin/远程分支名。
这个将会自动创建一个新的本地分支,并与指定的远程分支关联起来。
例如远程仓库里有个分支dev2,我本地没有该分支,我要把dev2拉到我本地。
若成功,将会在本地创建新分支dev2,并自动切到dev2上。
如果出现提示:
fatal: Cannot update paths and switch to branch 'dev2' at the same time.
Did you intend to checkout 'origin/dev2' which can not be resolved as commit?
表示拉取不成功。我们需要先执行。
git fetch。
然后再执行。