前言 将指定分支合并到当前分支 git merge 如果当前指针指向的是 master 分支,那么下面代码就是将 dev 分支合并到 master 分支 git merge dev 合并流程分析...$ git merge dev 结论: 创建 dev 分支后,因 master 分支没有做任何修改,故将 dev 分支合并到 master 分支时会绝对成功 3....发生文件冲突,合并失败 三路合并之合并成功示例: $ git merge dev 命令中的提示翻译 # 通过“递归”策略进行合并 4....合并场景之 three way merge(三路合并之冲突合并) 冲突产生的原因 两个分支在同一个文件的同一个位置有两套完全不同的修改,git 无法替我们决定使用哪一个,必须人为决定文件内容 自动合并失败时的提示...中止合并 已经执行了 git merge 合并分支,突然不想合并了,可以使用以下命令中止当前正在进行的合并 git merge --abort 收藏 | 0点赞 | 0打赏
---- git 合并策略 典型的使用指定 git 合并策略的命令这么写: $ git merge 要合并进来的分支名 --strategy=合并策略 例如: $ git merge origin/master...--strategy=resolve 或者使用简写 -s,例如: $ git merge origin/master -s resolve 可以指定的合并策略有: resolve recursive...origin/master -s recursive -X diff-algorithm=patience 由于 recursive 是默认的合并策略,所以可以简化成: $ git merge origin...注意 recursive 策略中也有一个 ours 参数,与这个不同的。 subtree 此策略使用的是修改后的递归三路合并算法。...- Stack Overflow -X patience vs -X diff-algorithm=patience with git merge-recursive - Stack Overflow
3.从远程仓库克隆文件到本地 命令: git clone +远程仓库地址 克隆远程仓库到本地,相当于创建了与之关联的本地仓库 示例: 先使用cd命令切换到某个文件夹位置然后使用如下命令: git...命令加上-b参数表示创建并切换分支 git branch 查看当前分支,会显示所有分支,并在当前分支前加*号 git merge + 分支名...log -- graph 命令可以查看分支合并图 4.分支管理策略 问题说明: 对于分支合并,通常的情况我们直接使用git merge命令进行合并,这些都是Fast Forward模式的快速合并。...Git会在merge时生成一个新的commit,这样从分支历史就可以看出分支信息,禁用时需要使用—- no-ff参数。...示例说明: 在执行合并时的禁用Fast forward的一个示例如下: git merge --no-ff -m “合并分支生成新的commit” dev 分支策略: 在实际开发中,我们需要遵循的几个基本原则
通过 git show 命令与一个特别的语法,你可以将冲突文件的这些版本释放出一份拷贝。...$ git config --global merge.conflictstyle diff3 git checkout 命令也可以使用 --ours 和 --theirs 选项,这是一种无需合并的快速方式...这个选项也可以传递给我们之前看到的 git merge-file 命令, 通过运行类似 git merge-file --ours 的命令来合并单个文件。...如果想要做类似的事情但是甚至并不想让 Git 尝试合并另外一边的修改, 有一个更严格的选项,它是 “ours” 合并 策略。 这与 “ours” recursive 合并 选项 不同。...$ git merge -s ours mundo Merge made by the 'ours' strategy. $ git diff HEAD HEAD~ $ 你可以看到合并后与合并前我们的分支并没有任何区别
通过 git show 命令与一个特别的语法,你可以将冲突文件的这些版本释放出一份拷贝。...$ git config --global merge.conflictstyle diff3 git checkout 命令也可以使用 --ours 和 --theirs 选项,这是一种无需合并的快速方式...这个选项也可以传递给我们之前看到的 git merge-file 命令,通过运行类似 git merge-file --ours 的命令来合并单个文件。...如果想要做类似的事情但是甚至并不想让 Git 尝试合并另外一边的修改,有一个更严格的选项,它是 “ours” 合并 策略。 这与 “ours” recursive 合并 选项 不同。...$ git merge -s ours mundo Merge made by the 'ours' strategy. $ git diff HEAD HEAD~ $ 你可以看到合并后与合并前我们的分支并没有任何区别
相关命令: git config --global alias.别名 别名代表的真正命令 对于那些经常使用的,或者是特别复杂的Git命令,我们可以为其设置别名,这样在我们想要执行对应的Git命令时,只要执行这个别名命令就好了..., origin/master, origin/HEAD) Merge tag 'arc-5.4-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git...' 在执行完上面的命令后,别名就设置好了,这样当我们执行 git l 的时候,Git帮我们执行的真正命令其实是 git log --graph --oneline。...我们来试下: $ git l * 8005803a2ca0 (HEAD -> master, origin/master, origin/HEAD) Merge tag 'arc-5.4-rc6'...Git相关的示例教程我都整理到了一个GitHub仓库下: https://github.com/wangyuntao/git-by-example
相关命令: # 比较当前工作区和Git的staging area里内容的区别 git diff # 比较Git的staging area和当前分支指向内容的区别 git diff --staged...我们再执行下面的命令,看下这次不同的diff命令有怎样的输出: $ git add a.txt # 将a.txt的修改提交到Git的staging area $ git -P diff # 没有任何输出...这是因为通过上面的git add命令,工作区里的文件内容已经同步到了Git的staging area里,所以此时这两个地方的文件内容是一样的,这样就导致了第一次diff命令没有任何输出。...里的内容被同步到了Git仓库里,所以这两次diff命令都没有任何输出。...所有命令的执行,目的都是将上一区域里变化的内容同步到下一区域,使这两个区域之间的内容完全相同。 用这种方式思考Git的版本管理机制,对于我们日后理解Git的各种命令有非常大的帮助。
---B---C topic # / # D---E---F---G master # 可以使用下面的命令,该命令的意思是: # 把从topic可达但从master不可达的提交...,该命令的意思是: # 把从topic可达但从next不可达的提交(o1,o2,o3)提取出来 # 然后以当前master为新的起始点将这些提交依次链接起来 git rebase --onto master...next topic 情景模拟: 先执行下面的命令,创建一个测试用的Git仓库: # 创建一个空的Git仓库 mkdir repo cd repo git init # master: D,E,F,...现在我们想要将topic分支上的ABC提交重新rebase到最新的master分支上,可以执行如下命令: $ git rebase master topic First, rewinding head...其实git rebase命令还可以干很多事,比如合并提交、删除指定提交等等,非常推荐大家好好看看git自带的rebase文档 git help rebase。
Git 会有很多合并策略,其中常见的是 Fast-forward、Recursive 、Ours、Theirs、Octopus。下面分别介绍不同合并策略的原理以及应用场景。...Recursive Recursive 是 Git 分支合并策略中最重要也是最常用的策略,是 Git 在合并两个有分叉的分支时的默认行为。...如下图在 master 分支里面执行git merge -s ours dev,会产生蓝色的这一个合并节点,其内容跟其上一个节点(master 分支方向上的)完全一样,即 master 分支合并前后项目文件没有任何变动...但你不想丢弃 dev1 的这样一个尝试,希望把它合入主干方便后期查看,这个时候你就可以在 dev2 分支中执行git merge -s ours dev1。...Git 有很多种分支合并策略,本文介绍了 Fast-forward、Recursive、Ours/Theirs、Octopus 合并策略以及三向合并。
由Git命令调用,提供对HTTP协议的支持 git remote-https 由Git命令调用,提供对HTTPS协议的支持 git remote-testgit 协议扩展示例脚本 8、版本库转换和交互相关命令...fast-import 其他版本库迁移至Git的通用工具 git svn Git 作为前端操作 Subversion 9、合并相关的辅助命令 命令 简要说明 git merge-base 供其他脚本调用...参见 git merge 的octopus合并策略 git merge-one-file 由 git merge-index 调用的标准辅助程序 git merge-ours 合并使用本地版本,抛弃他人版本...参见 git merge 的ours合并策略 git merge-recursive 针对两个分支的三向合并。...参见 git merge 的recursive合并策略 git merge-resolve 针对两个分支的三向合并。
P4Merge P4Merge是Git的一个第三发Diff和Merge工具(可视化冲突解决工具)....然后需要把p4merge的路径添加到环境变量PATH里面. 这样操作后, 就可以通过命令行启动p4merge了: ?...git status告诉我这个文件被修改了, 但是没有告诉我哪里被修改了. 为了知道更多的细节, 这里就需要使用 git diff命令了....因为我配置了git difftool, 所以也可以使用 git difftool这个命令: ? 这就会弹出p4merge这个可视化工具, 可以清楚的看到变化....下面这个命令比较的是HEAD 和 HEAD的上一次: git diff HEAD HEAD^.(这个命令在windows上可能有点问题, 请使用git bash): ?
在git库中已存在了这个文件,之前push提交过该文件。....gitignore文件只对还没有加入版本管理的文件起作用,如果之前已经用git把这些文件纳入了版本库,就不起作用了 解决: 需要在git库中删除该文件,并更新。...然后再次git status查看状态,文件不再显示状态。...git命令关键字 add gc receive-pack add--interactive get-tar-commit-id...merge-ours submodule credential-manager merge-recursive submodule
示例: Git fetch origin master git log -p master..origin/master git merge origin/master 以上命令的含义: 首先从远程的origin...pull示例: git pull origin master 上述命令其实相当于git fetch和git merge。...介绍Git冲突处理经验,以及merge和rebase中的ours和theirs的差别。 merge和rebase对于ours和theirs的定义是完全相反的。...在merge时,ours指代的是当前分支,theirs代表需要被合并的分支。而在rebase过程中,ours指向了修改参考分支,theirs却是当前分支。...git会在rebase结束后撤销这个改变,但它已经不可避免地影响了冲突的状态,使rebase中ours和theirs的定义与merge 截然相反。因此,在使用ours与theirs时请格外小心。
蛋先生:最近搞的事情需要实现两个应用项目的代码合并,逻辑就完全参照 git merge 的基本原则,那就聊聊 git merge 吧丹尼尔:git merge 我倒是经常用,不过却从未关心过它内部是怎么实现的...recursive,为啥叫递归呢?...蛋先生:还记得 git merge 的基本原则是 three-way 吗?...丹尼尔:除了 recursive,git merge 还有哪些合并策略呢?蛋先生:这个就要看你安装的 git 的版本了。git merge 可以指定合并策略。...strategies are: octopus ours recursive resolve subtree.最后丹尼尔:要不是我买了周杰伦的专辑,才想起你也好久没更新了,也就不会有今天这一出了蛋先生
语法Head@(移动到当前版本需要的步数) 2.2 HEAD指针 控制前进后退,指向离我们最近的目录 git reset --hard HEAD :恢复到当前指针指向的位置,本地库、暂存区、工作区保持一致...git diff :不指定文件名,比较当前工作区中所有文件 * * * 3.分支 3.1 命令 git branch -v :查看所有分支 git branch [new branch name] :...创建新分支 git checkout [branch name] :切换分支 git merge [branch name] :将其他修改的分支合并到当前分支上 merge选项--strategy=ours...git merge --strategy=ours [branch name]:将其他修改的分支合并到当前分支上,遇见冲突时以当前分支为主 3.2 解决冲突 1)编辑文件,解决冲突 2)修改文件后保存退出...git push -u origin [推送分支名]:当前分支与多个主机存在追踪关系时,使用-u选项指定一个默认主机origin,后续可直接使用git push命令 git branch -d [本地分支名
git merge dev # Auto-merging hello.txt # CONFLICT (content): Merge conflict in hello.txt # Automatic...: git diff --ours # :q to close git diff --theirs #:q to close 你可以手动编辑文件并提交修改,但我们设想一下,我们只想要其中一个版本。...git merge -X theirs dev # Auto-merging hello.txt # Merge made by the 'recursive' strategy. # hello.txt...| 5 +---- # 1 file changed, 1 insertion(+), 4 deletions(-) 与此策略相反的是 "ours"。...别名 大多数时候,你只需要使用少数几个命令(主要是checkout、add、commit、pull、push和merge),但有些命令可能是你想要“以防万一”的。
(4)reset常用示例 A)....test.js #只保留A同学的修改 $ git diff --ours #查看和B同学修改的差别 $ git checkout --ours test.js #只保留...如果你希望 Git 简单地选择特定的一边并忽略另外一边而不是让你手动合并冲突,你可以传递给 merge 命令一个 -Xours 或 -Xtheirs 参数。...可以通过下述命令,检索出对应版本文件: $ git show :1:test.js > test.common.js $ git show :2:test.js > test.ours.js $ git...方式二:克隆项目,自动初始化并更新仓库中的每一个子模块 $ git clone --recursive https://github.com/381510688/test.git (4)获取子模块最新内容
暂存区或索引我们根据其更改为新版本准备一组文件的区域HEAD它是当前分支中的指针,它具有完整的存储库历史记录每个阶段的命令如下:工作目录git 命令 描述...git reset --merge {sha1} 将当前 HEAD 重置为指定状态 {sha1},保持工作目录上的当前更改git reset HEAD...git merge {branch} 将当前分支与另一个指定分支合并 git merge...ignore-whitespace ‹ bugfix.patch 在当前分支上应用补丁 git merge second_repo.../master -s recursive -X ours 合并当前仓库
相关命令: # 设置Git让其在输出路径时正确显示中文 git config --global core.quotePath false # 如果是Mac用户,在执行了上述命令后还是不行 # 可以再看下...Git的 core.precomposeUnicode 这个参数 情景模拟: 先用下面的命令创建一个测试用的Git仓库: # 创建一个空的Git仓库 mkdir repo cd repo git init...# 添加一个文件 touch 中文文件名.txt 然后执行git status命令: $ git status On branch master Untracked files: (use "...下面我们再执行下文章开始时介绍的命令设置一下Git: $ git config --global core.quotePath false # 设置Git让其正确显示中文路径 $ git status...) 中文文件名.txt 看到了吧,在我们设置了Git的 core.quotePath 参数后,中文路径就可以正常显示了。
领取专属 10元无门槛券
手把手带您无忧上云