⑴ git怎么查询当前分支的版本号
#git reflog git log –pretty =oneline结果如下: Add git user profile functions for prompt display Merge pull request #4957 from TorrentKatten/master localization support for clock in candy theme Merge pull request #4956 from RobLoach/asdf Add 'asdf' plugin
⑵ 数是什么意思.这个命令要通过git merge
gitmerge是用来合并两个分支的。#将b分支合并到当前分支gitmergebgitcherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作。例如,假设我们有个稳定版本的分支,叫v2.0,另外还有个开发版本的分支v3.0,我们不能直接把两个分支合并,这样会导致稳定版本混乱,但是又想增加一个v3.0中的功能到v2.0中,这里就可以使用cherry-pick了。#先在v3.0中查看要合并的commit的commitidgitlog#假设是#切到v2.0中gitcheckv2.0#合并commitgitcherry-有点类似gitmerge,但是两者又有不同,打个比方,你有两个抽屉A和B,里面都装了衣服,现在想把B中的衣服放到A中,gitmerge是那种横冲直撞型的,拿起B就倒入A里面,如果满了(冲突)再一并整理;而gitrebase就很持家了,它会一件一件的从B往A中加,会根据一开始放入的时间顺序的来加,如果满了你可以处理这一件,你可以继续加,或者跳过这一件,又或者不加了,把A还原。所以merge适合那种比较琐碎的,简单的合并,系统级的合并还是用rebase吧。专业的区别请移步到这里合并和衍合#合并bgitrebaseb#处理完冲突继续合并gitrebase–continue#跳过gitrebase–skip#取消合并gitrebase–abort
⑶ git命令之git merge 和 git rebase的区别
git merge是用来合并两个分支的。# 将b分支合并到当前分支git merge bgit cherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作。例如,假设我 们有个稳定版本的分支,叫v2.0,另外还有个开发版本的分支v3.0,我们不能直接把两个分支合并,这样会导致稳定版本混乱,但是又想增加一个v3.0 中的功能到v2.0中,这里就可以使用cherry-pick了。# 先在v3.0中查看要合并的commit的commit idgit log# 假设是 commit # 切到v2.0中git check v2.0# 合并commitgit cherry-pick git rebase有点类似git merge,但是两者又有不同,打个比方,你有两个抽屉A和B,里面都装了衣服,现在想把B中的衣服放到A中,git merge是那种横冲直撞型的,拿起B就倒入A里面,如果满了(冲突)再一并整理;而git rebase就很持家了,它会一件一件的从B往A中加,会根据一开始放入的时间顺序的来加,如果满了你可以处理这一件,你可以继续加,或者跳过这一件,又 或者不加了,把A还原。所以merge适合那种比较琐碎的,简单的合并,系统级的合并还是用rebase吧。专业的区别请移步到这里合并和衍合 # 合并bgit rebase b# 处理完冲突继续合并git rebase –continue# 跳过git rebase –skip# 取消合并git rebase –abort
⑷ git中fetch和pull的区别
要讲清楚git fetch,git pull的区别必须要附加讲清楚git remote,git merge 、远程repo, branch 、 commit-id 以及 FETCH_HEAD。1. 【git remote】首先, git是一个分布式的结构,这意味着本地和远程是一个相对的名称。本地的repo仓库要与远程的repo配合完成版本对应必须要有 git remote子命令,通过git remote add来添加当前本地长度的远程repo, 有了这个动作本地的repo就知道了当遇到git push 的时候应该往哪里提交代码。2. 【git branch】其次,git天生就是为了多版本分支管理而创造的,因此分支一说,不得不提, 分支就相当于是为了单独记录软件的某一个发布版本而存在的,既然git是分布式的,便有了本地分支和远程分支一说,git branch 可以查看本地分支, git branch -r 可以用来查看远程分支。 本地分支和远程分支在git push 的时候可以随意指定,交错对应,只要不出现版本从图即可。3. 【git merge】再者,git的分布式结构也非常适合多人合作开发不同的功能模块,此时如果每个人都在其各自的分支上开发一个相对独立的模块的话,在每次release制作时都需先将各成员的模块做一个合并操作,用于合并各成员的工作成果,完成集成。 此时需要的就是git merge.4.【git push 和 commit-id】在每次本地工作完成后,都会做一个git commit 操作来保存当前工作到本地的repo, 此时会产生一个commit-id,这是一个能唯一标识一个版本的序列号。 在使用git push后,这个序列号还会同步到远程repo。在理解了以上git要素之后,分析git fetch 和 git pull 就不再困难了。 首先,git fetch 有四种基本用法1. git fetch →→ 这将更新git remote 中所有的远程repo 所包含分支的最新commit-id, 将其记录到.git/FETCH_HEAD文件中2. git fetch remote_repo →→ 这将更新名称为remote_repo 的远程repo上的所有branch的最新commit-id,将其记录。 3. git fetch remote_repo remote_branch_name →→ 这将这将更新名称为remote_repo 的远程repo上的分支: remote_branch_name4. git fetch remote_repo remote_branch_name:local_branch_name →→ 这将这将更新名称为remote_repo 的远程repo上的分支: remote_branch_name ,并在本地创建local_branch_name 本地分支保存远端分支的所有数据。 FETCH_HEAD: 是一个版本链接,记录在本地的一个文件中,指向着目前已经从远程仓库取下来的分支的末端版本。 git pull 的运行过程:git pull : 首先,基于本地的FETCH_HEAD记录,比对本地的FETCH_HEAD记录与远程仓库的版本号,然后git fetch 获得当前指向的远程分支的后续版本的数据,然后再利用git merge将其与本地的当前分支合并。
⑸ 关于git怎样合并不同版本
举个例子:git rev-list –after="Fri Jan 6 11:47:13 2017 +0800" –before="Fri Jan 11 11:47:13 2017 +0800" –reverse master | git cherry-pick –stdin先用git rev-list把一段时间内的变更列出来,然后用管道传给git cherry-pick。注意到回是为了cherry-pick,所以rev-list的输出顺序反一答下,变成最老的先输出。
⑹ git远程分支如何进行merge
1,需要本地仓库,并git commit2,此时git pull会报错:fatal: refusing to merge unrelated histories. 解决办法:git pull origin master –allow-unrelated-histories注意:master是我需要pull的分支,根据自己需求错误的解释:* "git merge" used to allow merging two branches that have no common base by default, which led to a brand new history of an existing project created and then get pulled by an unsuspecting maintainer, which allowed an unnecessary parallel history merged into the existing project. The command has been taught not to allow this by default, with an escape hatch "–allow-unrelated-histories" option to be used in a rare event that merges histories of two projects that started their lives independently.* "git pull" has been taught to pass the "–allow-unrelated-histories" option to underlying "git merge".避免这种错误的方法:不要用优盘或其他的方式拷贝源代码,需要一个人创建好项目后push到github或码云,然后通过fetch 或clone的方式下面推荐一个写的挺好的merge branch ,原文链接:https://www.cnblogs.com/forwill/p/6524185.htmlGit merge 不同的branchGit的优势是可以创建不同的branch,然后在每个branch上开发。那么问题是:如果不同的branch之间需要做同步,比如sourceBranch上做的修改也需要同步到targetBranch,改怎么做?1. 如果一个branch是有远程Git server管理的,另一个branch是自己本地的cd <your workspace>git branch //假定现在所在的branch是targetBranch,并最好保证没有未提交的修改,并且已经更新到最新git checkout -b sourceBranch //创建一个本地的sourceBranch并切换到sourceBranchgit commit //把sourceBranch上做的修改先提交git checkout targetBranch //切换回targetBranchgit merge –no-ff sourceBranch //把sourceBranch的修改merge到targetBranch。注意:建议merge的时候总是用 –no-ff 选项git status //保证现在workspace是干净的git push //push到远程,如果远程有新的修改,先做一下git pull2. 如果两个branch都是远程管理的,想把branchB的内容同步到branchA上cd <your workspace>git branch //假定现在所在的branch是branchA,并最好保证没有未提交的修改,并且已经更新到最新git checkout sourceBranch //确保同一个workspace能在不同的branch直接切换,即保证 .git/config里 [remote "origin"] 的内容是 fetch = +refs/heads/*:refs/remotes/origin/*git merge targetBranch解决conflicts如果merge的结果里有显示conflictsgit commit //解决冲突后先commit到sourceBranchgit checkout targetBranch //切换到targetBranchgit merge –no-ff sourceBranch //建议merge的时候总是用 –no-ff 选项git push origin targetBranch //把sourceBranch的修改merge到targetBranch之后,push到远程的targetBranch
⑺ 如何使用git merge 一系列的commits
由于太问撤销 merge 于 git 官份教程表示 git 现思想体系达撤销 merge 目标 reset merge 前版本再重做接操作要求每合作者都晓本 HEAD 都滚: $ git checkout 【行操作所支】 $ git reset –hard 【merge前版本号】 二 merge 别操作改git 办能撤销 merge用 git revert: $ git revert -m 【要撤销条merge线编号1始计算(看哪条线几啊)】 【merge前版本号】 Finished one revert. [master 88edd6d] Revert "Merge branch 'jk/post-checkout'" 1 files changed, 0 insertions(+), 2 deletions(-) 创建新 commit 抵消应 merge 操作且 git merge 【编号所代表支】 提示: Already up-to-date. 使用二让 git 误支东西都咱想要 三撤销二: $ git revert 【二撤销merge提交commit版本号88edd6d】 Finished one revert. [master 268e243] Revert "Revert "Merge branch 'jk/post-checkout'"" 1 fil…
⑻ 如何 git push 或者 merge 指定的几个文件
1、首先新建一个文本文件,名字为“.gitignore.txt”。
⑼ git merge是怎样判定冲突的
在解决gitmerge的冲突时,有时我总忍不住吐槽git实在太不智能了,明明仅仅是往代码里面插入几行,没想到合并就失败了,只能手工去一个个确认。真不知道git的合并冲突是怎么判定的。在一次解决了涉及几十个文件的合并冲突后(整整花了我一个晚上和一个早上的时间!),我终于下定决心,去看一下gitmerge代码里面冲突判定的具体实现。正所谓冤有头债有主,至少下次遇到同样的问题时就可以知道自己栽在谁的手里了。于是就有了这样一篇文章,讲讲gitmerge内部的冲突判定机制。recursivethree-waymerge和ancestorgit的源码先用merge作关键字搜索,看看涉及的相关代码。找了一段时间,找到了gitmerge的时候,比较待合并文件的函数入口:ll_merge。另外还有一份文档,它也指出ll_merge正是合并实现的入口。从函数签名可以看到,mmfile_t应该就代表了待合并的文件。有趣的是,这里待合并的文件并不是两份,而是三份。intll_merge(mmbuffer_t*result_buf,constchar*path,mmfile_t*ancestor,constchar*ancestor_label,mmfile_t*ours,constchar*our_label,mmfile_t*theirs,constchar*their_label,conststructll_merge_options*opts)看过githelpmerge的读者应该知道,ours表示当前分支,theirs表示待合并分支。看得出来,这个函数就是把某个文件在不同分支上的版本合并在一起。那么ancestor又是位于哪个分支呢?倒过来从调用方开始阅读代码,可以看出大体的流程是这样的,gitmerge会找出三个commit,然后对每个待合并的文件调用ll_merge,生成最终的合并结果。按注释的说法,ancestor是后面两个commit(ours和theirs)的公共祖先(ancestor)。另外前面提到的文档也说明,git合并的时候使用的是recursivethree-waymerge。关于recursivethree-waymerge,wikipedia上有个相关的介绍#Recursive_three-way_merge)。就是在合并的时候,将ours,theirs和ancestor三个版本的文件进行比较,获取ours和ancestor的diff,以及theirs和ancestor的diff,这样做能够发现两个不同的分支到底做了哪些改动。毕竟后面git需要判定冲突的内容,如果没有原初版本的信息,只是简单地比较两个文件,是做不到的。鉴于我的目标是发掘git判定冲突的机制,所以没有去看git里面查找ancestor的实现。不过只需肉眼在图形化界面里瞅上一眼,就可以找到ancestorcommit。(比如在gitlab的network界面中,回溯两个分支的commit线,一直到岔路口)有一点需要注意的是,revert一个commit不会改变它的ancestor。所谓的revert,只是在当前commit的上面添加了新的undocommit,并没有改变“岔路口”的位置。不要想当然地认为,revert之后ancestor就变成上一个commit的ancestor了。尤其是在revertmergecommit的时候,总是容易忘掉这个事实。假如你revert了一个mergecommit,在重新merge的时候,git所参照的ancestor将不是merge之前的ancestor,而是revert之后的ancestor。于是就掉到坑里去了。建议所有读者都看一下git官方对于revertmergecommit潜在后果的说法:mit的公共祖先,比较同一个文件分别在ours和theirs下对于公共祖先的差异,然后合并这两组差异。如果双方同时修改了一处地方且修改内容不同,就判定为合并冲突,依次输出双方修改的内容。
⑽ Git怎样撤销一次分支的合并Merge
解决方法:
1.找到最后一次提交到master分支的版本号,即【merge前的版本号】
2.回退到某个版本号
git reset –hard 【merge前的版本号】
这个时候已经会退到了上一次提交的版本,但是之后的修改还是存在master分支上,以下步骤很关键
3.重新创建一个分支,这时候的分支就是上一次提交的代码
git checkout -b newmaster
4.推到对应的远程newmaster
git push
5.这个时候相当于备份做好了,接下来就可以删除本地及远端的master分支
git branch -d mastergit push –delete origin master
6.从newmaster分支,重新在创建master分支,并推向远端
git checkout newmastergit checkout -b mastergit push
7.大功告成!