{"id":2620,"date":"2009-04-24T22:23:46","date_gmt":"2009-04-24T14:23:46","guid":{"rendered":"http:\/\/ihower.idv.tw\/blog\/?p=2620"},"modified":"2024-04-21T18:46:53","modified_gmt":"2024-04-21T10:46:53","slug":"git-part2-branch-and-remote-repository","status":"publish","type":"post","link":"https:\/\/ihower.tw\/blog\/2620-git-part2-branch-and-remote-repository","title":{"rendered":"Git \u7248\u672c\u63a7\u5236\u7cfb\u7d71(2) \u958b branch \u5206\u652f\u548c\u64cd\u4f5c\u9060\u7aef repo."},"content":{"rendered":"<blockquote><p>\n  \u95dc\u65bc Git \u53ef\u4ee5\u53c3\u8003\u6211\u7684 <a href=\"https:\/\/ihower.tw\/git\/\">Git \u7248\u672c\u63a7\u5236<\/a> \u8ab2\u7a0b\u8cc7\u6599\n<\/p><\/blockquote>\n<p>\u7528 Git \u5c31\u662f\u8981\u611b\u7528 Branch \u554a\uff0cBranch \u5f88\u597d\u7528\uff0c\u958b Branch \u4e0d\u7528\u9322\u3002\u958b Branch \u7684\u60c5\u5883\u9664\u4e86\u5728\u4e0a\u4e00\u7bc7\u4e2d\u63d0\u5230\u56e0\u61c9\u7522\u54c1 release \u9700\u6c42\u7684 stable\/production branch \u4e4b\u5916\uff0c\u5176\u4ed6\u958b branch \u60c5\u6cc1\u6709\uff1a<\/p>\n<ul>\n<li>\u5e36\u6709\u5be6\u9a57\u6027\u8cea\u7684\u8b8a\u66f4\uff0c\u4f8b\u5982\u60f3\u6539\u5beb\u65b0\u7684\u6f14\u7b97\u6cd5\u3001\u91cd\u69cb\u7a0b\u5f0f\u78bc\u7b49<\/li>\n<li>\u65b0\u529f\u80fd feature \u958b\u767c<\/li>\n<li>Bug fixes\uff0c\u4f60\u53ef\u80fd\u9700\u8981\u505a\u4e9b\u5be6\u9a57\u624d\u77e5\u9053\u5230\u5e95\u600e\u9ebc\u4fee<\/li>\n<\/ul>\n<p>\u9019\u4e9b\u4e8b\u60c5\u90fd\u53ef\u4ee5\u5148\u5728\u672c\u5730\u958b local branch \u505a\uff0c\u800c\u4e0d\u9700\u8981\u7acb\u5373 Push \u5206\u4eab\u7d66\u5225\u4eba\u3002<\/p>\n<p><code><br \/>\ngit branch &lt;new_branch_name&gt; \u5efa\u7acb\u672c\u5730 local branch<br \/>\ngit branch -m &lt;old_name&gt; &lt;new_name&gt; \u6539\u540d\u5b57 (\u5982\u679c\u6709\u540c\u540d\u6703\u5931\u6557\uff0c\u6539\u7528 -M \u53ef\u4ee5\u5f37\u5236\u8986\u84cb)<br \/>\ngit branch \u5217\u51fa\u76ee\u524d\u6709\u90a3\u4e9b branch \u4ee5\u53ca\u76ee\u524d\u5728\u90a3\u500b branch<br \/>\ngit checkout &lt;branch_name&gt; \u5207\u63db branch (\u6ce8\u610f\u5230\u5982\u679c\u4f60\u6709\u6a94\u6848\u4fee\u6539\u4e86\u537b\u9084\u6c92 commit\uff0c\u6703\u4e0d\u80fd\u5207\u63db branch\uff0c\u89e3\u6cd5\u7a0d\u5f8c\u6703\u8ac7)<br \/>\ngit checkout -b &lt;new_branch_name&gt; (&lt;from_branch_name&gt;) \u672c\u5730\u5efa\u7acb branch \u4e26\u7acb\u5373 checkout \u5207\u63db\u904e\u53bb<br \/>\ngit branch -d &lt;branch_name&gt; \u522a\u9664 local branch<br \/>\n<\/code><\/p>\n<p>\u958b Branch \u6700\u5927\u7684\u597d\u8655\u9664\u4e86\u53ef\u4ee5\u4e0d\u5f71\u97ff stable \u548c\u5176\u4ed6\u5206\u652f\u7248\u672c\u7684\u958b\u767c\uff0c\u53e6\u4e00\u500b\u8d85\u68d2\u7684\u5730\u65b9\u662f&#8221;\u4f60\u53ef\u4ee5\u6c7a\u5b9a Merge \u7684\u65b9\u5f0f&#8221;\u3002Git \u7684 Merge \u65b9\u5f0f\u53ef\u4ee5\u5206\u6210\u56db\u7a2e\uff1a<\/p>\n<ul>\n<li>Straight merge \u9810\u8a2d\u7684\u5408\u4f75\u6a21\u5f0f\uff0c\u6703\u6709\u5168\u90e8\u7684\u88ab\u5408\u4f75\u7684 branch commits \u8a18\u9304\u52a0\u4e0a\u4e00\u500b merge-commit\uff0c\u770b\u7dda\u5716\u6703\u6709\u5169\u689d Parents \u7dda\uff0c\u4e26\u4fdd\u7559\u6240\u6709 commit log\u3002<\/li>\n<li>Squashed commit \u58d3\u7e2e\u6210\u53ea\u6709\u4e00\u500b merge-commit\uff0c\u4e0d\u6703\u6709\u88ab\u5408\u4f75\u7684 log\u3002SVN \u7684 merge \u5373\u662f\u5982\u6b64\u3002<\/li>\n<li>cherry-pick \u53ea\u5408\u4f75\u6307\u5b9a\u7684 commit<\/li>\n<li>rebase \u8b8a\u66f4 branch \u7684\u5206\u652f\u9ede\uff1a\u5c07\u76ee\u524d branch \u7684 commits\uff0c\u4e00\u500b\u500b\u91cd\u65b0\u91cd\u65b0 apply (\u6216\u53eb\u505apatch) \u5230\u8981\u88ab rebase \u7684 branch \u4e0a\u3002\u4f8b\u5982\u5728 A branch rebase B branch\uff0c\u5c31\u6703\u628a\u539f\u672c\u5206\u652f\u9ede\u4e4b\u5f8c\u6240\u6709\u7684 A commits \u8a18\u9304\uff0c\u91cd\u65b0\u5728 B branch \u4e0a\u518d commit \u4e00\u904d\uff0c\u9019\u6642\u65b0\u5206\u652f\u9ede\u8b8a\u6210 B branch \u7684\u6700\u65b0\u7684 commit\u3002\u9019\u65b9\u5f0f\u50c5\u9069\u5408\u9084\u6c92\u5206\u4eab\u7d66\u5225\u4eba\u7684 local branch\uff0c\u56e0\u70ba\u7b49\u65bc\u780d\u6389\u91cd\u7df4\u76ee\u524d branch \u7684 commits \u8a18\u9304\u3002<\/li>\n<\/ul>\n<p>\u5176\u4e2d rebase \u6bd4\u8f03\u96e3\u7406\u89e3\u5728<a href=\"http:\/\/ihower.tw\/blog\/archives\/3843\">\u4e0b\u4e00\u7bc7<\/a>\u6709\u5716\u89e3\u3002<\/p>\n<p><code><br \/>\ngit merge &lt;branch_name&gt; \u5408\u4f75\u53e6\u4e00\u500b branch\uff0c\u82e5\u6c92\u6709 conflict \u885d\u7a81\u6703\u76f4\u63a5 commit\u3002\u82e5\u9700\u8981\u89e3\u6c7a\u885d\u7a81\u5247\u6703\u518d\u591a\u4e00\u500b commit\u3002<br \/>\ngit merge --squash &lt;branch_name&gt; \u5c07\u53e6\u4e00\u500b branch \u7684 commit \u5408\u4f75\u70ba\u4e00\u7b46\uff0c\u7279\u5225\u9069\u5408\u9700\u8981\u505a\u5be6\u9a57\u7684 fixes bug \u6216 new feature\uff0c\u6700\u5f8c\u53ea\u7559\u7d50\u679c\u3002\u5408\u4f75\u5b8c\u4e0d\u6703\u5e6b\u4f60\u5148 commit\u3002<br \/>\ngit cherry-pick 321d76f \u53ea\u5408\u4f75\u7279\u5b9a\u5176\u4e2d\u4e00\u500b commit\u3002\u5982\u679c\u8981\u5408\u4f75\u591a\u500b\uff0c\u53ef\u4ee5\u52a0\u4e0a -n \u6307\u4ee4\u5c31\u4e0d\u6703\u5148\u5e6b\u4f60 commit\uff0c\u9019\u6a23\u53ef\u4ee5\u591a pick\u5e7e\u500b\u8981\u5408\u4f75\u7684 commit\uff0c\u6700\u5f8c\u518d git commit \u5373\u53ef\u3002<br \/>\n<\/code><\/p>\n<p>\u4f7f\u7528 merge \u53ef\u80fd\u6703\u6709\u90e8\u5206\u7a0b\u5f0f\u78bc\u6703 conflict \u885d\u7a81\uff1a\u7c21\u55ae\u7684\u60c5\u6cc1\u53ea\u8981\u7de8\u8f2f\u6a94\u6848\u8655\u7406 &lt;&lt;&lt;&lt; ===== &gt;&gt;&gt;&gt;&gt; \u5373\u53ef\uff0c\u7136\u5f8c\u91cd\u65b0 add \u5230 staging area \u4e26 commit (\u6c92\u6709\u50cf SVN \u7684 resolve \u6307\u4ee4)\u3002\u8907\u96dc\u4e00\u9ede\u7684\u53ef\u4ee5\u518d\u7528 git mergetool \u9078\u6a94\u6848\u5408\u4f75\u7684 GUI \u5de5\u5177 (OS X \u4e0b\u9762\u53ef\u4ee5\u7528 opendiff, linux \u53ef\u4ee5\u7528 kdiff3 )\uff0c\u8655\u7406\u597d\u5f8c git commit\u3002<\/p>\n<p>\u4e00\u65e6 merge \u597d\u4e86\uff0cgit branch -d &lt;branch_name&gt; \u53ef\u4ee5\u522a\u9664 branch\u3002\u4f46\u5982\u679c\u8981\u522a\u9664\u7684 branch \u9084\u6c92\u6709\u5408\u4f75\uff0c\u5c31\u6703\u6709\u932f\u8aa4\u8a0a\u606f\u3002\u5982\u679c\u771f\u7684\u8981\u5f37\u5236\u522a\u9664\u53ef\u4ee5\u7528 -D<\/p>\n<p>Git \u7684 working tree \u662f\u5f9e SVN \u63db\u904e\u4f86\u4e00\u500b\u4e0d\u7fd2\u6163\u7684\u5730\u65b9\uff0c\u56e0\u70ba\u5b83\u53ea\u662f\u4e00\u500b\u5de5\u4f5c\u66ab\u5b58\u5340\uff0c\u5728\u5207\u63db Branch \u6642\u5c31\u6703\u6574\u500b\u63db\u6389\u3002\u4e5f\u56e0\u70ba\u5982\u6b64\uff0c<strong>\u5982\u679c\u6709\u6a94\u6848\u6709\u4fee\u6539\u9084\u6c92\u6709 commit \u51fa\u53bb\uff0c\u5207\u63db branch \u6642\u5c31\u6703\u51fa\u73fe error \u4e0d\u80fd\u5207\u63db<\/strong> (\u9664\u975e\u662f\u65b0\u7684 untracking \u6a94\u6848)\uff0c\u4f8b\u5982\u6709\u4fee\u6539\u9084\u6c92 add \u6703\u51fa\u73fe error: Entry &#8216;ooxx&#8217; not uptodate. Cannot merge. \u6709\u4fee\u6539\u4e14\u5df2\u7d93add(\u9084\u6c92ci)\u6703\u51fa\u73fe error: Entry &#8216;ooxx&#8217; would be overwritten by merge. Cannot merge.<\/p>\n<p>\u6700\u7406\u60f3\u7684\u8655\u7406\u7576\u7136\u662f\u4e8b\u60c5\u525b\u597d\u505a\u5230\u4e00\u500b\u6bb5\u843d\uff0c\u628a\u6771\u897f commit \u51fa\u53bb\u624d\u5207\u63db branch \u505a\u4e8b\u3002\u4e0d\u904e\u4e8b\u60c5\u7e3d\u6709\u81e8\u6642\uff0c\u5982\u679c\u8981\u63db branch \u7684\u66ab\u6642\u7684\u89e3\u6c7a\u65b9\u5f0f\u662f\u4f7f\u7528 git stash \u6703\u5148\u628a\u4fee\u6539\u66ab\u5b58\u4e0b\u4f86\uff0c\u8981\u56de\u5fa9\u5247\u57f7\u884c git stash pop\u3002\u4e0b\u4e00\u7bc7\u7b49\u4f60\u5b78\u6703 git reset \u4e4b\u5f8c\uff0c\u4f60\u6703\u767c\u73fe\u5c31\u7b97\u628a\u9084\u6c92\u5b8c\u6210\u7684\u6771\u897f commit \u4e5f\u4e0d\u6703\u600e\u9ebc\u6a23\uff0c\u53ea\u8981\u9084\u6c92 push \u51fa\u53bb\u4e00\u5207 commit \u7d00\u9304\u90fd\u662f\u53ef\u4ee5\u6539\u7684\u3002<\/p>\n<h3>Remote repo. \u64cd\u4f5c<\/h3>\n<p>\u9996\u5148\u8981\u8a8d\u8b58\u7684\u662f Protocol\uff0c\u50cf\u5728 Github \u4e0a\u9762\u770b\u81ea\u5df1\u7684 Project\uff0c\u6703\u6709\u5206 Public Clone URL \u8ddf Your Clone URL\uff0c\u9019\u6709\u4ec0\u9ebc\u5dee?<\/p>\n<ul>\n<li><a href=\"\" class=\"autohyperlink\"><\/a> \u9019\u7a2e\u7684\u662f\u4f7f\u7528 Git \u81ea\u5df1\u7684 prototol\uff0c\u512a\u9ede\u662f\u901f\u5ea6\u5feb\uff0c\u4f46\u662f\u6c92\u6709\u8a8d\u8b49\u6a5f\u5236\uff0c\u53ea\u9069\u5408 read only (port:9418)<\/li>\n<li><a href=\"mailto:git@github.com\" class=\"autohyperlink\">git@github.com<\/a>\/ihower\/project.git \u9019\u7a2e\u7684\u662f\u4f7f\u7528 SSH\uff0c\u53ef\u4ee5\u6709\u8a8d\u8b49(SSH key)<\/li>\n<li>Git \u4e5f\u53ef\u4ee5\u900f\u904e HTTPS \u7684\u65b9\u5f0f\uff0c\u4e0d\u904e\u901f\u5ea6\u8f03\u6162\uff0c\u6bd4\u8f03\u9069\u5408\u5c0d firewall \u6709\u9650\u5236\u7684\u60c5\u6cc1<\/li>\n<\/ul>\n<p>\u5176\u4e2d Github \u5c31\u662f\u540c\u6642\u7528 SSH + Git protocol\uff0c\u517c\u9867\u8a8d\u8b49\u9700\u6c42\u53ca\u901f\u5ea6\u3002<\/p>\n<p><code><br \/>\ngit clone &lt;remote_address&gt;<br \/>\ngit checkout --track -b foobar origin\/foobar \u5c07\u9060\u7aef\u7684 branch checkout \u56de\u4f86\u4e26\u5efa\u7acb\u4e00\u500b\u65b0\u7684 local branch\uff0c\u52a0\u4e0a --track \u8868\u793a\u4f60\u4e4b\u5f8c\u9084\u8981pull\u3001push\u56de\u53bb\uff0c\u6240\u4ee5\u8acb Git \u8a18\u4f4f\u5c0d\u61c9\u95dc\u4fc2\u3002<br \/>\ngit pull (&lt;local_branch_name&gt; origin\/&lt;remote_branch_name&gt;) \u53bb\u9060\u7aef fetch \u65b0\u7248\u4e26 merge \u9032 local branch<br \/>\ngit push \u5c07 local branch \u7684 commit \u7d00\u9304\u66f4\u65b0\u5230\u9060\u7aef<\/code><\/p>\n<p>git pull \u8981\u6ce8\u610f\u7684\u662f\uff0c\u5982\u679c\u5225\u4eba\u5728\u4f60\u4e0a\u6b21 pull \u4e4b\u5f8c\u6709 push \u65b0\u6771\u897f\u4e0a\u53bb(\u4e5f\u5c31\u662f\u8aaa\u8ddf\u4f60\u7684 branch \u7522\u751f\u5206\u5c94\u4e86)\uff0c\u6b64\u6642\u6709\u5169\u7a2e\u60c5\u6cc1\uff1a \u4e00\u662f Git \u53ef\u4ee5\u9806\u5229 auto merge \u7684\u8a71\uff0cgit \u6703\u81ea\u52d5\u591a\u4e00\u6b21 merge commit\uff0c\u9019\u4e5f\u5c31\u70ba\u4ec0\u9ebc\u5e38\u5e38 log \u6703\u8dd1\u51fa Merge branch &#8216;master&#8217; of <a href=\"mailto:git@foobar.com\" class=\"autohyperlink\">git@foobar.com<\/a>\u3002\u4e8c\u662f\u5982\u679c\u6709 conflict\uff0c\u9019\u6642\u5019\u5c31\u9700\u8981\u4f60\u624b\u52d5\u8655\u7406\u7136\u5f8c commit\u3002\u8a71\u8aaa\u5982\u679c\u89ba\u5f97\u9019\u7a2e local branch \u548c remote branch \u7684 merge commit log \u5f88\u7169\uff0c\u5efa\u8b70\u53ef\u4ee5\u6539\u4f7f\u7528 git pull &#8211;rebase \u6307\u4ee4\u4f86\u8b8a\u6210 fast-forward \u5f62\u5f0f (\u5c31\u6703\u8b8a\u5f97\u50cf svn up\uff0c\u800c\u4e0d\u6703\u6709 merge commit log)\u3002rebase \u7684\u610f\u601d\u53ef\u80fd\u8981\u4e0b\u4e00\u7bc7\u624d\u6703\u8a73\u7d30\u8aaa\u660e\u7684\u6e05\u695a\uff0c\u7c21\u55ae\u7684\u8aaa(?)\uff0c\u5c31\u662f\u5148\u780d\u6389 local branch \u5206\u5c94\u9ede\u4e4b\u5f8c\u81ea\u5df1\u7684 commit\uff0c\u7136\u5f8c\u628a\u9060\u7aef\u7684 commit \u5148\u4e00\u500b\u500b apply \u9032\u4f86\uff0c\u6700\u5f8c\u518d\u628a\u81ea\u5df1\u7684 commit \u518d apply \u9032\u53bb (\u5982\u679c\u6709 conflict \u6703\u4e2d\u9014\u505c\u4e0b\u4f86\uff0c\u7b49\u4f60\u4fee\u597d\u624d\u6703\u7e7c\u7e8c apply)\uff0c\u5982\u6b64\u4e00\u4f86\u770b\u7dda\u5716\u5c31\u6703\u8b8a\u6210\u4e00\u689d\u7dda\u800c\u5df2\uff0c\u4e5f\u5c31\u6c92\u6709\u6240\u8b02 merge \u9019\u500b\u52d5\u4f5c\u4e86\u3002<\/p>\n<p>git push \u9810\u8a2d\u7684\u9060\u7aef\u662f origin\uff0c\u4e26\u4e14\u6703\u5c07\u6240\u6709\u6709\u548c remote \u6709\u5c0d\u61c9\u7684 local branch \u90fd push \u4e0a\u53bb\u3002\u5982\u679c\u8981\u628a\u65b0\u7684 local branch push \u4e0a\u53bb\uff0c\u9700\u8981\u4e0b git push origin &lt;local_vranch_name&gt; \u6307\u4ee4\u3002<\/p>\n<p>git push \u4e5f\u53ef\u80fd\u6703\u5931\u6557\uff0c\u4f8b\u5982\u51fa\u73fe ! [rejected] master -&gt; master (non-fast forward)\uff0c\u9019\u500b non-fast forward \u7684\u610f\u601d\u662f\u4f60\u7684 parent commit \u548c\u9060\u7aef\u7684\u4e0d\u76f8\u540c\uff0c\u4e5f\u5c31\u662f\u7dda\u5716\u6709\u5206\u5c94\uff0c\u9700\u8981\u5148 pull \u56de\u4f86\u8655\u7406\u597d merge \u624d\u80fd push \u4e0a\u53bb\u3002<\/p>\n<p>fast-forward \u5728 Git \u662f\u4e00\u7a2e merge \u8853\u8a9e\uff0c\u7576 B branch (\u4f8b\u5982\u4e00\u500b local branch) \u662f\u5f9e A branch (\u4f8b\u5982\u4e00\u500b remote branch) \u7684\u6700\u65b0\u7248(HEAD)\u5206\u652f\u51fa\u4f86\u7684\uff0c\u90a3\u7576 A \u8981\u628a B merge \u9032\u4f86\u6642\uff0c\u56e0\u70ba B \u7684 parent commit \u662f A \u7684 HEAD\uff0c\u6240\u4ee5\u9019\u5169\u500b branch \u552f\u4e00\u7684\u5dee\u7570\u5c31\u662f B \u5f8c\u4f86\u7684 commit \u800c\u5df2\uff0c\u800c\u4e0d\u6703\u6709\u4efb\u4f55 conflict\u3002\u6240\u4ee5\u5be6\u969b\u4e0a\u7684\u52d5\u4f5c\u53ea\u8981\u628a A \u7684 HEAD \u6539\u6210 B \u7684 HEAD \u5c31\u597d\u4e86\uff0c\u7dda\u5716\u4e0a\u9019\u5169\u500b branch \u6839\u672c\u662f\u540c\u4e00\u689d\u7dda\uff0c\u6b64\u8b02 fast-forward\u3002<\/p>\n<p>\u5176\u4ed6\u64cd\u4f5c\u9084\u6709:<\/p>\n<p><code><br \/>\ngit fetch \u628a\u9060\u7aef\u7684 branch \u66f4\u65b0\u4e0b\u8f09\u56de\u4f86\uff0c\u4f46\u4e0d\u6703 merge \u5230 local branch<br \/>\ngit branch -r \u986f\u793a local \u6709\u8ffd\u8e64\u7684\u9060\u7aef branch\u3002\u6ce8\u610f\u5230\u4f60\u4e0d\u80fd\u76f4\u63a5\u4fee\u6539\u9019\u500b remote branch\uff0c\u4e00\u5b9a\u8981\u7528\u4e00\u500b local branch \u5c0d\u61c9\u5b83\u3002<br \/>\ngit remote show origin \u986f\u793a\u9060\u7aef server \u7684 branch<br \/>\ngit remote add foobar git:\/\/ \u53ef\u4ee5\u65b0\u589e\u5225\u7684 repo. \u4f4d\u7f6e\uff0c\u65bc\u662f pull \u7684\u6642\u5019\u5c31\u53ef\u4ee5\u6307\u5b9a\u8981\u5f9e\u54ea\u4e00\u500b\u9060\u7aef\u66f4\u65b0\u56de\u4f86\u3002<br \/>\ngit push origin :foobar \u522a\u9664\u9060\u7aef\u7684 branch<br \/>\n<\/code><\/p>\n<p>\u56e0\u70ba\u9060\u7aef\u7684\u64cd\u4f5c\u6307\u4ee4\u6bd4\u8f03\u96dc\uff0c\u6240\u4ee5\u4e5f\u6709\u4eba\u5beb\u4e86 <a href=\"http:\/\/github.com\/webmat\/git_remote_branch\/tree\/master\">git_remote_branch<\/a> \u4f86\u7c21\u5316\u64cd\u4f5c\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u95dc\u65bc Git \u53ef\u4ee5\u53c3\u8003\u6211\u7684 Git \u7248\u672c\u63a7\u5236 \u8ab2\u7a0b\u8cc7\u6599 \u7528 Git \u5c31\u662f\u8981\u611b\u7528 Branch \u554a\uff0cBranch &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/ihower.tw\/blog\/2620-git-part2-branch-and-remote-repository\" class=\"more-link\">\u95b1\u8b80\u5168\u6587<span class=\"screen-reader-text\">\u3008Git \u7248\u672c\u63a7\u5236\u7cfb\u7d71(2) \u958b branch \u5206\u652f\u548c\u64cd\u4f5c\u9060\u7aef repo.\u3009<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[48],"tags":[],"class_list":["post-2620","post","type-post","status-publish","format-standard","hentry","category-git","entry"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p1q6tG-Gg","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/ihower.tw\/blog\/wp-json\/wp\/v2\/posts\/2620","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ihower.tw\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ihower.tw\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ihower.tw\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ihower.tw\/blog\/wp-json\/wp\/v2\/comments?post=2620"}],"version-history":[{"count":67,"href":"https:\/\/ihower.tw\/blog\/wp-json\/wp\/v2\/posts\/2620\/revisions"}],"predecessor-version":[{"id":12068,"href":"https:\/\/ihower.tw\/blog\/wp-json\/wp\/v2\/posts\/2620\/revisions\/12068"}],"wp:attachment":[{"href":"https:\/\/ihower.tw\/blog\/wp-json\/wp\/v2\/media?parent=2620"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ihower.tw\/blog\/wp-json\/wp\/v2\/categories?post=2620"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ihower.tw\/blog\/wp-json\/wp\/v2\/tags?post=2620"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}