<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>https://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>https://jackxiang.com/post//</link>
<title><![CDATA[[实践OK]Git:代码冲突常见解决方法研究学习，特别是git commit -m和git commit -am对三个区的一个解读是解决冲突的核心。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[版本控制]]></category>
<pubDate>Tue, 27 Jun 2017 14:16:03 +0000</pubDate> 
<guid>https://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	git commit -am&quot;&quot; #提交除开没有Add的文件外的所有修改，如：git rm ,git mv,git add....<br/>-----------<br/>背景：一般是自己领先master几个版本，二是自己落后master几个版本，三是自己无论落后还是先进都和Master对齐(比如：分支，git checkout -b feature,修改index.html,再转到git checkout master,再合并分支到master,git merge feature...,最后,解决冲突并git add index.html,当然也可以commit -am....,提交并无误的情况下，删除git的特征分支：git branch -d&nbsp;&nbsp;feature )，如何解决上面三种冲突并能正常提交呢？<br/>零、关于从暂存区回退方面的文章见：https://justwinit.cn/post/9253/<br/>一、Git服务端版本领先问题参考：https://justwinit.cn/post/9300/<br/>二、Git服务端版本落后问题本文解决：<br/>#git push<br/>To git@git.boosh.com.cn:irdcops/spec.boosh.com.cn.git<br/>! [rejected]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;master -&gt; master (fetch first)<br/>error: 无法推送一些引用到 &#039;git@git.boosh.com.cn:irdcops/spec.boosh.com.cn.git&#039;<br/>提示：更新被拒绝，因为远程仓库包含您本地尚不存在的提交。这通常是因为另外<br/>提示：一个仓库已向该引用进行了推送。再次推送前，您可能需要先整合远程变更<br/>提示：（如 &#039;git pull ...&#039;）。<br/>提示：详见 &#039;git push --help&#039; 中的 &#039;Note about fast-forwards&#039; 小节。<br/><br/>[root@levoo-php-memcached-reids-zookeeper_bj_sjs_10_51_77_34:/tmp/gitstudy/conflict/spec.boosh.com.cn]<br/>#git pull<br/>remote: Counting objects: 3, done.<br/>remote: Compressing objects: 100% (3/3), done.<br/>remote: Total 3 (delta 0), reused 0 (delta 0)<br/>展开对象中: 100% (3/3), 完成.<br/>来自 git.boosh.com.cn:irdcops/spec.boosh.com.cn<br/>&nbsp;&nbsp; c333506..47f275b&nbsp;&nbsp;master&nbsp;&nbsp;&nbsp;&nbsp; -&gt; origin/master<br/>自动合并 README.md<br/>冲突（内容）：合并冲突于 README.md<br/>自动合并失败，修正冲突然后提交修正的结果。<br/><br/>====================git status 提示双方修改：README.md====================<br/>#git status<br/>位于分支 master<br/>您的分支和 &#039;origin/master&#039; 出现了偏离，<br/>并且分别有 1 和 1 处不同的提交。<br/>&nbsp;&nbsp;（使用 &quot;git pull&quot; 来合并远程分支）<br/>您有尚未合并的路径。<br/>&nbsp;&nbsp;（解决冲突并运行 &quot;git commit&quot;）<br/><br/>未合并的路径：<br/>&nbsp;&nbsp;（使用 &quot;git add &lt;文件&gt;...&quot; 标记解决方案）<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;双方修改：&nbsp;&nbsp; README.md<br/><br/>修改尚未加入提交（使用 &quot;git add&quot; 和/或 &quot;git commit -a&quot;）<br/><br/>=====================查看文件=================================<br/>#cat README.md&nbsp;&nbsp; <br/>&lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD<br/>conflict&nbsp;&nbsp;9:57 modify<br/>=======<br/>老王在这儿提交了一个并给提交到线上去了。-addTime:20170410 9:59<br/>&gt;&gt;&gt;&gt;&gt;&gt;&gt; 47f275befbc4fcd306eb4978fb75dde0545b040b<br/><br/>==================解决README.md文件===============<br/>cat README.md <br/>conflict&nbsp;&nbsp;9:57 modify<br/>老王在这儿提交了一个并给提交到线上去了。-addTime:20170410 9:59<br/><br/>================再查看该文件并pull一下查看状态================<br/>git pull<br/>error: Pull is not possible because you have unmerged files.<br/>提示：请在工作区改正文件，然后酌情使用 &#039;git add/rm &lt;文件&gt;&#039; 命令标记<br/>提示：解决方案并提交。<br/>fatal: Exiting because of an unresolved conflict.<br/><br/>===理解修改尚未加入提交（使用 &quot;git add&quot; 和/或 &quot;git commit -a&quot;）=====<br/>git commit-m与-am的区别：https://segmentfault.com/q/1010000005900988<br/>标识：也就是说得理解那几个区，这个-a 是指虽然跟踪了，但是没有git add纳入暂存区(自己已经纳入了，但是因为冲突了，别人修改了，它并没有在自己这边的暂存区里的意思。还得通过git add一次纳入自己本地的暂存区，或直接-a就能把本地合并冲突的文件直接纳入到暂存区，有点绕，应该就是这个意思，就可以git push解决这个冲突了。)<br/>[注意]git commit -am可以写成git commit -a -m，但不能写成git commit -m -a，如果里面有一些草稿文件也就是并不需要提交的其它的文件本就在里面，会被一并提交上暂存区，这个一定要注意用-am时要把它们都删除掉，只留下需要入暂存区的文件，否则，会把所有的没有用的文件纳入后，再git push一下就会出现把很多没有用的文件提交上git服务器上去了。<br/><br/>==========实践上面的理解=============================================<br/>git commit -am&quot;解决冲突后，纳入自己的暂存区里 commit -am中的a就是这个意思，代替了git add 。&quot; <br/>[master 0006642] 解决冲突后，纳入自己的暂存区里 commit -am中的a就是这个意思，代替了git add 。<br/><br/>============解决冲突后放到暂存区后，再Git push也就成功能======================================<br/>git push<br/>对象计数中: 6, 完成.<br/>压缩对象中: 100% (5/5), 完成.<br/>写入对象中: 100% (6/6), 873 bytes &#124; 0 bytes/s, 完成.<br/>Total 6 (delta 0), reused 0 (delta 0)<br/>To git@git.boosh.com.cn:irdcops/spec.boosh.com.cn.git<br/>&nbsp;&nbsp; 47f275b..0006642&nbsp;&nbsp;master -&gt; master<br/><br/><br/>最后，果然提交成功，在那个老王的git目录下，再 git pull无问题,查看内容也就下来了：<br/>git pull<br/>remote: Counting objects: 6, done.<br/>remote: Compressing objects: 100% (5/5), done.<br/>remote: Total 6 (delta 0), reused 0 (delta 0)<br/>展开对象中: 100% (6/6), 完成.<br/>来自 git.boosh.com.cn:irdcops/spec.boosh.com.cn<br/>&nbsp;&nbsp; 47f275b..0006642&nbsp;&nbsp;master&nbsp;&nbsp;&nbsp;&nbsp; -&gt; origin/master<br/>更新 47f275b..0006642<br/>Fast-forward<br/>README.md &#124; 1 +<br/>1 file changed, 1 insertion(+)<br/><br/>cat README.md <br/>conflict&nbsp;&nbsp;9:57 modify<br/>老王在这儿提交了一个并给提交到线上去了。-addTime:20170410 9:59<br/><br/><br/><br/>三、git reset revert 回退回滚取消提交返回上一版本,最常用的是合并feature 分支的冲突解决：<br/>一般没有别人开发出现冲突，是因自己回退引起的，<br/>git reset revert 回退回滚取消提交返回上一版本：http://justwinit.cn/post/9253/<br/>解决冲突合并分支：<br/>http://m.toutiao.org/group/6407171134127472898/?iid=8936996522&amp;app=news_article&amp;tt_from=weixin&amp;utm_source=weixin&amp;utm_medium=toutiao_ios&amp;utm_campaign=client_share&amp;wxshare_count=1<br/>实践成功如下步骤，注意，这种合并都是基于那个暂存库：<br/><br/>显示本地分支：<br/>git branch<br/>* master<br/><br/>新建分支<br/>准备新的feature1分支，继续我们的新分支开发：<br/>#git checkout -b feature&nbsp;&nbsp;#它是建立并进入到刚进入的分支。<br/>切换到一个新分支 &#039;feature&#039;<br/>再次建立的提示：<br/>git checkout -b feature<br/>fatal: 一个分支名 &#039;feature&#039; 已经存在。<br/><br/>查看分支的建立情况，有了：<br/>git branch<br/>* feature<br/>&nbsp;&nbsp;master<br/><br/>修改文件 修改index.html：<br/>#echo conflict &gt;&gt; index.html<br/>vi index.html<br/>hello jack ,write by feature...<br/><br/>在feature分支上提交：<br/>git add index.html<br/>git commit -m&quot;提交到分支&quot; ./index.html <br/>===================================================================================================<br/>切换回master分支：<br/>git checkout master<br/>A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; index.html<br/>切换到分支 &#039;master&#039;<br/>您的分支与上游分支 &#039;origin/master&#039; 一致。<br/><br/><br/>master分支修改:<br/>在master分支上修改index.html：<br/>echo master_conflict &gt;&gt; index.html<br/>vi index.html <br/>add by jack from master...<br/>提交到暂存库：<br/>git commit -am&quot;写两个字试一试吧~&quot;<br/><br/>分支合并<br/>这种情况下，Git无法执行“快速合并”，只能试图把各自的修改合并起来，但这种合并就可能会有冲突，我们试试看：<br/>git merge feature<br/>自动合并 index.html<br/>冲突（内容）：合并冲突于 index.html<br/>自动合并失败，修正冲突然后提交修正的结果。<br/><br/>#cat index.html <br/>create confilict with feature branch<br/>master_conflict<br/>&lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD<br/>add by jack from master...<br/>=======<br/>jackX<br/><br/>hello jack ,write by feature...<br/>&gt;&gt;&gt;&gt;&gt;&gt;&gt; feature<br/><br/>#git status&nbsp;&nbsp;#这儿注意了：用git commit -am&quot;&quot; 还是用git add index再git commit -m&quot;&quot; index.html的区别，前面有讲到。<br/>位于分支 master<br/>您的分支领先 &#039;origin/master&#039; 共 1 个提交。<br/>&nbsp;&nbsp;（使用 &quot;git push&quot; 来发布您的本地提交）<br/>您有尚未合并的路径。<br/>&nbsp;&nbsp;（解决冲突并运行 &quot;git commit&quot;）<br/><br/>未合并的路径：<br/>&nbsp;&nbsp;（使用 &quot;git add &lt;文件&gt;...&quot; 标记解决方案）<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;双方修改：&nbsp;&nbsp; index.html<br/><br/>修改尚未加入提交（使用 &quot;git add&quot; 和/或 &quot;git commit -a&quot;）<br/>#git commit -am&quot;直接am实现不用git add 就提交到master的暂存库里&quot;&nbsp;&nbsp;<br/>[master 386a151] 直接am实现不用git add 就提交到master的暂存库里<br/>#git push<br/>对象计数中: 12, 完成.<br/>压缩对象中: 100% (11/11), 完成.<br/>写入对象中: 100% (12/12), 1.20 KiB &#124; 0 bytes/s, 完成.<br/>Total 12 (delta 5), reused 0 (delta 0)<br/>To git@git.boosh.com.cn:irdcops/spec.boosh.com.cn.git<br/>&nbsp;&nbsp; e171ea5..386a151&nbsp;&nbsp;master -&gt; master<br/><br/><br/>最后，删除feature分支：<br/># git branch -d feature<br/>已删除分支 feature（曾为 4bcdf8e）。<br/><br/><br/><br/>------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------<br/>想从线上获取并覆盖本地：<br/>git reset --hard<br/>git pull<br/>实践如下：<br/>git reset --hard<br/>HEAD 现在位于 a7e4eed rollo back<br/>git log<br/>commit a7e4eed0755b8b8c28de63ecc735565169466f8d<br/>Author: 詹金斯 &lt;17080156868@163.com&gt;<br/>Date:&nbsp;&nbsp; Mon Mar 27 20:55:07 2017 +0800<br/>&nbsp;&nbsp;&nbsp;&nbsp;rollo back<br/><br/>再想回退是不行的：<br/>git revert 0b82ab0dd0c898e0b7c18714a8b81b417f80a7bb zookeeper-3.4.9.el6.x86_64.spec<br/>fatal: bad revision &#039;zookeeper-3.4.9.el6.x86_64.spec&#039;<br/><br/>查看状态：<br/>git status<br/>位于分支 master<br/>您的分支和 &#039;origin/master&#039; 出现了偏离，<br/>并且分别有 2 和 2 处不同的提交。<br/>&nbsp;&nbsp;（使用 &quot;git pull&quot; 来合并远程分支）<br/>未跟踪的文件:<br/>&nbsp;&nbsp;（使用 &quot;git add &lt;文件&gt;...&quot; 以包含要提交的内容）<br/><br/>再从Git服务器上拉取：<br/>git pull<br/>自动合并 centos7/zookeeper-3.4.9.el6.x86_64.spec<br/>冲突（内容）：合并冲突于 centos7/zookeeper-3.4.9.el6.x86_64.spec<br/>自动合并失败，修正冲突然后提交修正的结果。<br/><br/>=======================================================<br/>如果系统中有一些配置文件在服务器上做了配置修改,然后后续开发又新添加一些配置项的时候,<br/><br/>在发布这个配置文件的时候,会发生代码冲突:<br/><br/>error: Your local changes to the following files would be overwritten by merge:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;protected/config/main.php<br/>Please, commit your changes or stash them before you can merge.<br/><br/>如果希望保留生产服务器上所做的改动,仅仅并入新配置项, 处理方法如下:<br/><br/>git stash<br/>git pull<br/>git stash pop<br/>然后可以使用Git diff -w +文件名 来确认代码自动合并的情况.<br/><br/><br/><br/>反过来,如果希望用代码库中的文件完全覆盖本地工作版本. 方法如下:<br/><br/>git reset --hard<br/>git pull<br/>其中git reset是针对版本,如果想针对文件回退本地修改,使用<br/><br/>在CODE上查看代码片派生到我的代码片<br/>git checkout HEAD file/to/restore&nbsp;&nbsp;<br/><br/><br/>参考自：http://blog.chinaunix.net/uid-10415985-id-4142896.html<br/>http://blog.csdn.net/iefreer/article/details/7679631
]]>
</description>
</item><item>
<link>https://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [实践OK]Git:代码冲突常见解决方法研究学习，特别是git commit -m和git commit -am对三个区的一个解读是解决冲突的核心。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>