├── git.png ├── git-4-on-server.txt ├── git-1-2-base.txt ├── git-3-branch.txt └── README.md /git.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webcoding/useGit/HEAD/git.png -------------------------------------------------------------------------------- /git-4-on-server.txt: -------------------------------------------------------------------------------- 1 | Study from:http://www.tcreator.info/webSchool/tools/git-4-on-server.html 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /git-1-2-base.txt: -------------------------------------------------------------------------------- 1 | Study from:http://www.tcreator.info/webSchool/tools/git-1-getstart.html 2 | Study from:http://www.tcreator.info/webSchool/tools/git-2-base.html 3 | 4 | $ ssh -v git@github.com 5 | 6 | 7 | $ git config --global user.name "John Doe" 8 | $ git config --global user.email johndoe@example.com 9 | 10 | 11 | 设置默认使用的文本编辑器 12 | $ git config --global core.editor emacs 13 | 14 | 差异分析工具,例如: 15 | git config --global merge.tool vimdiff 16 | 17 | 18 | 检查已有的配置信息 19 | git config --list 20 | 21 | $ git help 22 | $ git --help 23 | 24 | $ git help config 25 | 26 | 27 | 28 | Create a new repository on the command line 29 | 30 |
31 | touch README.md 32 | git init 33 | git add README.md 34 | git commit -m "first commit" 35 | git remote add origin https://github.com/webcoding/FrontEnd-Standard.git 36 | git push -u origin master 37 |38 | 39 | Push an existing repository from the command line 40 | 41 |
42 | git remote add origin https://github.com/webcoding/FrontEnd-Standard.git 43 | git push -u origin master 44 |45 | 46 | 47 | 初始化新仓库 48 | git init 49 | 50 | 51 | $ git clone git://github.com/schacon/grit.git 52 | $ git clone git://github.com/schacon/grit.git mygrit #项目重命名 53 | 54 | 查看文件当前处于什么状态, 55 | git status 56 | 57 | git add 开始跟踪一个新文件 58 | 暂存这次更新,需要运行git add 命令(这是个多功能命令,根据目标文件的状态不同,此命令的效果也不同:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等) 59 | git diff查看尚未暂存的文件更新了哪些部分 60 | git diff --cached 命令 已经暂存起来的文件和上次提交时的快照之间的差异 61 | git diff --staged,Git 1.6.1 及更高版本还允许使用这个,效果是相同的,但更好记些 62 | 63 | ===================== 64 | .gitignore 文件 65 | 66 | # 此为注释 – 将被 Git 忽略 67 | *.[oa] # 忽略所有以 .o 或 .a 结尾的文件 68 | *~ # 忽略所有以波浪符(~)结尾的文件 69 | *.a # 忽略所有 .a 结尾的文件 70 | !lib.a # 但 lib.a 除外 71 | /TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO 72 | build/ # 忽略 build/ 目录下的所有文件 73 | doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt 74 | 75 | 提交更新 76 | 77 | 提交命令(暂存起来git add的) 78 | git commit 79 | 80 | 可以用 -m 参数后跟提交说明的方式,在一行命令中提交更新: 81 | git commit -m "edit intro" #这样提交前就不用git add了 82 | 83 | 84 | 跳过使用暂存区域 85 | -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤: 86 | 87 | git commit -a -m "edit intro" 88 | 89 | 推送数据到远程仓库 90 | git push origin master 91 | 92 | git remote show origin 93 | 94 | git remote rename pb paul 重命名pb为paul 95 | git remote rm paul 移除远端仓库 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 列显已有的标签 105 | git tag 106 | git tag -l 'v1.4.2.*' 107 | 108 | 新建标签 109 | git tag -a v1.4 -m 'my version 1.4' 110 | git show v1.4 111 | 112 | 签署标签 113 | git tag -s v1.5 -m 'my signed 1.5 tag' 114 | 再运行 git show 会看到对应的 GPG 签名也附在其内: 115 | git show v1.5 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | -------------------------------------------------------------------------------- /git-3-branch.txt: -------------------------------------------------------------------------------- 1 | Study from:http://www.tcreator.info/webSchool/tools/git-3-branch.html 2 | 3 | 新建分支 4 | git branch testing 5 | 6 | 切换分支 7 | git checkout testing 8 | git checkout master 9 | 10 | git checkout -b iss53 11 | 相当于执行下面这两条命令: 12 | git branch iss53 13 | git checkout iss53 14 | 15 | 新建紧急修补分支(不过在此之前,留心你的暂存区或者工作目录里,那些还没有提交的修改,它会和你即将检出的分支产生冲突从而阻止 Git 为你切换分支。切换分支的时候最好保持一个清洁的工作区域。稍后会介绍几个绕过这种问题的办法(分别叫做 stashing 和 commit amending)。目前已经提交了所有的修改,所以接下来可以正常转换到master 分支:) 16 | 17 | git checkout -b 'hotfix' 18 | 修改后合并(先返回主干再marge) 19 | git checkout master 20 | git merge hotfix 21 | hotfix 完成历史使命,就可以删掉了 22 | git branch -d hotfix 23 | 如果顺着一个分支走下去可以到达另一个分支的话,那么 Git 在合并两者时,只会简单地把指针右移,因为这种单线的历史分支不存在任何需要解决的分歧,所以这种合并过程可以称为快进(Fast forward)。 24 | 25 | 26 | $ git merge iss53 27 | Auto-merging index.html 28 | CONFLICT (content): Merge conflict in index.html 29 | Automatic merge failed; fix conflicts and then commit the result. 30 | 产生了冲突,可以git status(逻辑上说,这种问题只能由人来裁决。) 31 | 32 | 在解决了所有文件里的所有冲突后,运行 git add 将把它们标记为已解决状态(译注:实际上就是来一次快照保存到暂存区域。)。因为一旦暂存,就表示冲突已经解决。如 33 | 34 | 如果你想用一个有图形界面的工具来解决这些问题,不妨运行git mergetool,它会调用一个可视化的合并工具并引导你解决所有冲突: 35 | git mergetool 36 | 37 | 再运行一次 git status 来确认所有冲突都已解决: 38 | 如果觉得满意了,并且确认所有冲突都已解决,也就是进入了暂存区,就可以用 git commit 来完成这次合并提交。 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 分支的管理 47 | 48 | git branch 命令不仅仅能创建和删除分支,如果不加任何参数,它会给出当前所有分支的清单: 49 | git branch 50 | 注意看 master 分支前的 * 字符:它表示当前所在的分支。 51 | 52 | 若要查看各个分支最后一个提交对象的信息,运行git branch -v: 53 | git branch -v 54 | 55 | 要从该清单中筛选出你已经(或尚未)与当前分支合并的分支,可以用 --merge 和 --no-merged 选项(Git 1.5.6 以上版本)。比如用git branch --merge 查看哪些分支已被并入当前分支(译注:也就是说哪些分支是当前分支的直接上游。): 56 | 57 | git branch --merged 58 | 一般来说,列表中没有 * 的分支通常都可以用 git branch -d 来删掉。原因很简单,既然已经把它们所包含的工作整合到了其他分支,删掉也不会损失什么。 59 | 60 | 另外可以用 git branch --no-merged 查看尚未合并的工作: 61 | 62 | 推送本地分支 63 | 如 serverfix 的分支需要和他人一起开发,可以运行 git push (远程仓库名) (分支名)推送: 64 | git push origin serverfix 65 | 也可以运行git push origin serverfix:serferfix 66 | 67 | 若想把远程分支叫作awesomebranch,可以用 git push origin serverfix:awesomebranch 来推送数据。 68 | 69 | 如果再想要一份自己的 serverfix 来开发,可以在远程分支的基础上分化出一个新的分支来: 70 | git checkout -b serverfix origin/serverfix 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 跟踪远程分支 79 | 80 | 从远程分支 checkout 出来的本地分支,称为_跟踪分支(tracking branch)_。 81 | 82 | 83 | 84 | 你可以随心所欲地设定为其它跟踪分支,git checkout -b [分支名] [远程名]/[分支名] 85 | git checkout --track origin/serverfix 86 | 87 | git checkout -b sf origin/serverfix 更名为sf 88 | 89 | 90 | 91 | 92 | 删除远程分支 93 | git push origin :serverfix 94 | 咚!服务器上的分支没了。你最好特别留心这一页,因为你一定会用到那个命令,而且你很可能会忘掉它的语法。有种方便记忆这条命令的方法:记住我们不久前见过的 git push [远程名] [本地分支]:[远程分支] 语法,如果省略 [本地分支],那就等于是在说“在这里提取空白然后把它变成[远程分支]”。 95 | 96 | 比如在master分支时删除develop分支 97 | git push origin :develop 98 | 99 | 100 | 101 | 分支的衍合 102 | rebase 命令,就可以把在一个分支里提交的改变移到另一个分支里重放一遍。 103 | 104 | git checkout experiment 105 | git rebase master 106 | 把当前分支衍合,衍合能产生一个更为整洁的提交历史。如果视察一个衍合过的分支的历史记录,看起来会更 清楚:仿佛所有修改都是在一根线上先后进行的,尽管实际上它们原本是同时并行发生的。 107 | (译注:实际上是把解决分支补丁同最新主干代码之间冲突的责任,化转为由提交补丁的人来解决。) 108 | 109 | 把基于 server 分支而非 master 分支的改变,跳过 server 直接放到master 分支中重演一遍 110 | git rebase --onto master server client 111 | 112 | 即:取出 client 分支,找出 client 分支和 server 分支的共同祖先之后的变化,然后把它们在master 上重演一遍 113 | 114 | 之后就可以快进master分支了 115 | git checkout master 116 | git merge client 117 | 118 | 119 | git rebase master server 120 | 121 | 122 | 123 | 衍合的风险 124 | 125 | 奇妙的衍合也并非完美无缺,要用它得遵守一条准则: 126 | 一旦分支中的提交对象发布到公共仓库,就千万不要对该分支进行衍合操作。 127 | 如果你遵循这条金科玉律,就不会出差错。否则,人民群众会仇恨你,你的朋友和家人也会嘲笑你,唾弃你。 128 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | useGit 2 | ====== 3 | 4 | 这是一个学习Git 用于测试的项目,所需软件 5 | 6 | - 命令行 - Git客户端 [http://www.git-scm.com/download/](http://www.git-scm.com/download/) 7 | - 图形化界面 - TortoiseGit [http://download.tortoisegit.org/tgit/](http://download.tortoisegit.org/tgit/) 8 | 9 | 另外,关于文档说明文件,如readme.md文件,详情参看 [Markdown 语法说明](http://docs.yanzhanjun.cn/pandora/docs/modules/markdown.html)。 10 | 11 | 在使用之前建议先大体了解一下git的相关基础: 12 | 13 | ## 如果学习使用并测试项目,请使用示例 [Webtest](https://github.com/webcoding/webtest) 来测试学习。 14 | 15 | 不要用正在线运营的项目 16 | 17 | Git详解教程列表: 18 | --------------- 19 | 20 | 之前以下链接失效,更新下面的链接到官网中文版(2017-02-17) 21 | 22 | * [Git详解-目录](https://git-scm.com/book/zh/v2/) 23 | * [Git详解之一 Git起步](https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%85%B3%E4%BA%8E%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6) 24 | * [Git详解之二 Git基础](https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E8%8E%B7%E5%8F%96-Git-%E4%BB%93%E5%BA%93) 25 | * [Git详解之三 Git分支](https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%AE%80%E4%BB%8B) 26 | * [Git详解之四 服务器上的Git](https://git-scm.com/book/zh/v2/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git-%E5%8D%8F%E8%AE%AE) 27 | * [Git详解之五 分布式Git](https://git-scm.com/book/zh/v2/%E5%88%86%E5%B8%83%E5%BC%8F-Git-%E5%88%86%E5%B8%83%E5%BC%8F%E5%B7%A5%E4%BD%9C%E6%B5%81%E7%A8%8B) 28 | * [Git详解之六 Github](https://git-scm.com/book/zh/v2/GitHub-%E8%B4%A6%E6%88%B7%E7%9A%84%E5%88%9B%E5%BB%BA%E5%92%8C%E9%85%8D%E7%BD%AE) 29 | * [Git详解之七 Git工具](https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E9%80%89%E6%8B%A9%E4%BF%AE%E8%AE%A2%E7%89%88%E6%9C%AC) 30 | * [Git详解之八 自定义Git](https://git-scm.com/book/zh/v2/%E8%87%AA%E5%AE%9A%E4%B9%89-Git-%E9%85%8D%E7%BD%AE-Git) 31 | * [Git详解之九 Git与其他系统](https://git-scm.com/book/zh/v2/Git-%E4%B8%8E%E5%85%B6%E4%BB%96%E7%B3%BB%E7%BB%9F-%E4%BD%9C%E4%B8%BA%E5%AE%A2%E6%88%B7%E7%AB%AF%E7%9A%84-Git) 32 | * [Git详解之十 Git内部原理](https://git-scm.com/book/zh/v2/Git-%E5%86%85%E9%83%A8%E5%8E%9F%E7%90%86-%E5%BA%95%E5%B1%82%E5%91%BD%E4%BB%A4%E5%92%8C%E9%AB%98%E5%B1%82%E5%91%BD%E4%BB%A4) 33 | * [Appendix A: 其它环境中的 Git](https://git-scm.com/book/zh/v2/Appendix-A%3A-%E5%85%B6%E5%AE%83%E7%8E%AF%E5%A2%83%E4%B8%AD%E7%9A%84-Git-%E5%9B%BE%E5%BD%A2%E7%95%8C%E9%9D%A2) 34 | * [Appendix B: 将 Git 嵌入你的应用](https://git-scm.com/book/zh/v2/Appendix-B%3A-%E5%B0%86-Git-%E5%B5%8C%E5%85%A5%E4%BD%A0%E7%9A%84%E5%BA%94%E7%94%A8-%E5%91%BD%E4%BB%A4%E8%A1%8C-Git-%E6%96%B9%E5%BC%8F) 35 | * [Appendix C: Git 命令](https://git-scm.com/book/zh/v2/Appendix-C%3A-Git-%E5%91%BD%E4%BB%A4-%E8%AE%BE%E7%BD%AE%E4%B8%8E%E9%85%8D%E7%BD%AE) 36 | 37 | Git 常用命令图表——[思维导图-Git.png](http://pic002.cnblogs.com/img/1-2-3/201007/2010072023345292.png) 38 | 39 | 还可以参考一个比较全的教程[Git教程](http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000) 40 | 41 | # Git与github操作指南 42 | 43 | 首先了解一些命令,方便操作使用,下面提供一些命令行中常用的文件/文件夹操作命令: 44 | 45 | 创建:mkdir .ssh 46 | 修改:mv .ssb .ssh 47 | 删除:rm -rf .ssh 48 | 创建文件:touch README.md 49 | 输出文本:cat id_rsa.pub 50 | 51 | ## Git命令行模式与github网站关联 52 | 53 | 使用ssh加密实现与github网站的关联,避免每次同步都需要填写帐户密码,首次产生一个ssh key: 54 | 55 | cd ~/.ssh 56 | 57 | // 如果没有.ssh目录,则自己新建此目录即可,如下 58 | // cd ~/ 59 | // mkdir .ssh 60 | // cd .ssh 61 | 62 | ssh-keygen -t rsa //直接 N 次回车即可,默认名为id_rsa,不用修改即可 63 | # 64 | 65 | 设置关联(复制上面产生的key——id_rsa.pub中代码——全选即可) 66 | 67 | 不同的操作系统,均有一些命令,直接将SSH key从文件拷贝到粘贴板中,如下: 68 | 69 | ``` 70 | mac 71 | pbcopy < ~/.ssh/id_rsa.pub 72 | # Copies the contents of the id_rsa.pub file to your clipboard 73 | 74 | windows 75 | clip < ~/.ssh/id_rsa.pub 76 | # Copies the contents of the id_rsa.pub file to your clipboard 77 | 78 | linux 79 | sudo apt-get install xclip 80 | # Downloads and installs xclip. If you don't have `apt-get`, you might need to use another installer (like `yum`) 81 | 82 | xclip -sel clip < ~/.ssh/id_rsa.pub 83 | # Copies the contents of the id_rsa.pub file to your clipboard 84 | ``` 85 | 86 | 在github网站setting中找到Add SSH Keys,添加复制的内容即可。 87 | 88 | 如此即关联完毕,如此在之后与github网站的push、pull操作则不用再输入github帐户密码了,非常方便。 89 | 90 | 可以使用下面的命令测试下: 91 | 92 | $ssh -T git@github.com 93 | 94 | 然后会提示你输入密码,输入完成后,会显示在GitHub上的用户名。 95 | 96 | ### 首次使用需要的一些配置设置 97 | 98 | 第一次使用git,一般需要设置全局config,如下: 99 | 100 | $ git config --global user.name "John Doe" 101 | $ git config --global user.email johndoe@example.com 102 | 103 | 第一次使用git push时,会提示设置git config --global push.default 将其设置为simple就行了,如下: 104 | 105 | git config --global push.default simple //你可以直接如此设置,不必等操作遇到才设置 106 | 107 | 以上配置完毕,就可以clone一个远程项目了,下面会给出一个完整详细的git项目操作示例,在文末还会将命令行示例中的常用命令做一汇总列表,方便查阅参考。 108 | 109 | ## GIt命令行模式操作项目的详细步骤示例(此处以[Git测试项目](https://github.com/pandoraui/webtest)为例详解) 110 | 111 | 为了方便练习,确保有各种的权限操作,你可以fork一个[git测试项目webtest](https://github.com/pandoraui/useGit),之后操作的时候把路径换成自己的就行了。 112 | 113 | 首先把项目克隆到本地(注意要选择项目目录,别clone到之前的.ssh目录下了) 114 | 115 | //在项目目录右键选择Git Bash 116 | Jack@ALICE /E/git 117 | $ git clone git@github.com:pandoraui/webtest.git //(注意选择项目目录,此处我们以E:/git文件夹为例) 118 | cd 119 | $ cd webtest //操作需要在项目文件夹内,不然直接进行git命令操作时,会提示错误 120 | 121 | 下面我们对内部文件进行及提交(更详细的基础操作,请参看[Git基础](http://www.tcreator.info/webSchool/tools/git-2-base.html)) 122 | 123 | git status //查看文件当前处于什么状态 124 | git commit -a -m "edit intro" //添加、修改以及合并提交 125 | git push 推送到远程分支(github网站/Git服务器上),第一次操作新分支时,系统会提示远程没有当前testing分支,并提示操作方法新建远程分支,如下: 126 | fatal: The current branch dev has no upstream branch. 127 | To push the current branch and set the remote as upstream, 128 | 129 | git push --set-upstream origin dev 130 | 131 | 132 | cloudyan@IT0101 /E/wamp/www/webframe/cnBootstrap (dev) 133 | $ git push --set-upstream origin testing //把新建的本地分支推送到远程 134 | 135 | git pull //从远程分支下拉更新(从默认的当前远程分支),直接merge合并到当前项目中 136 | git pull git@github.com:other/useGit.git //从其他项目链接合并更新 137 | 138 | 管理分支 139 | 140 | git branch testing //新建分支 141 | git checkout testing //切换分支 142 | git checkout master //切换回主干 143 | 144 | git checkout -b testing //新建分支并切换过去 145 | 相当于执行下面这两条命令: 146 | git branch testing 147 | git checkout testing 148 | 149 | 修改分支testing后合并到主干 150 | git checkout master //首先切换到主干 151 | git merge testing //合并分支testing 152 | 153 | git branch --list //查看分支,新建了分支并切换成功同时与远程分支建立了联系 154 | 155 | 合并后,testing分支完成历史使命,就可以删掉了 156 | git branch -d testing //此时如果此之前已经将此分支推送到了远程,那么本地分支删除,远程github网站上还是有此分支的。 157 | 158 | 如果在合并git merge testing的时候,出现了下面的错误提示 159 | Auto-merging index.html 160 | CONFLICT (content): Merge conflict in index.html 161 | Automatic merge failed; fix conflicts and then commit the result. 162 | 产生了冲突,可以git status(逻辑上说,这种问题只能由人来裁决。) 163 | 164 | 解决完冲突,执行merge添加、修改以及合并提交命令即可。 165 | 166 | //本地分支删除后,下面删除远程分支testing 167 | git push origin :testing 168 | 169 | 如此,这些命令能满足最常用的git操作。 170 | 171 | # 图形化软件TortoiseGit与github网站关联 172 | 173 | 如果你不喜欢Git命令行,那么你可以在安装以上软件后,使用图形化软件TortoiseGit来管理,TortoiseGit 是 TortoiseSVN的Git版,它很好的实现了与windows资源管理器的融合,使用界面与TortoiseSVN 非常类似。 174 | 175 | 安装好 [TortoiseGit](https://code.google.com/p/tortoisegit/downloads/list) (有中文包的) 后,需要如下操作,但首先你要了解一点: 176 | 177 | TortoiseGit 使用扩展名为ppk的密钥,而不是ssh-keygen生成的rsa密钥。也就是说使用ssh-keygen -C "username@email.com" -t rsa产生的密钥在TortoiseGit中不能用。而基于github的开发必须要用到rsa密钥,因此需要用到TortoiseGit的putty key generator工具来生成既适用于github的rsa密钥也适用于TortoiseGit的ppk密钥。 178 | 179 | 如此,就需要在TortoiseGit中也要设置与github网站的关联。 180 | 181 | **具体操作如下:** 182 | 183 | 运行TortoiseGit开始菜单中的puttygen程序,点击“Generate”按钮,鼠标在其软件界面中的空白地方来回移动直到进度条完毕,就会自动生一个随机的key。保存public key(此需要添加到github网站上) 和private key(此后缀为.ppk,后面要用) 184 | 185 | 在github网站上添加key操作Git key的添加,除此之外,需要右键指定具体的项目,选择TortoiseGit->Settings,设置Remote 其Putty即为上面保存的.ppk文件。麻烦之处是针对每个项目初次都要设置remote中的.ppk的路径。(参看更详细 [TortoiseGit配置说明](http://www.tcreator.info/webSchool/tools/git-TortoiseGit.html) 3.4这一段—— 建立沟通远程版本库与TortoiseGit的联系) 186 | 187 | 事实上,在clone一个新项目时,可以使用图形化界面,其中有一项便是**加载putty密钥**,选择密钥的路径即可,如 188 | C:\Users\Jack\.ssh\pandora.ppk 如此,之后在该项目的右键settings-remote处便已经添加了密钥路径,效果同上操作。 189 | 190 | 如此之后便可以无障碍使用图形化界面上传下拉git项目了。 191 | 192 | 如有疑问可以加QQ群:187260298 咨询讨论,Good Luck ! 193 | 194 | 195 | ### 遇到错误:### 196 | 197 | 1. 在clone一个项目后做git命令操作时,出现下面错误解决办法: 198 | 199 | fatal: Not a git repository (or any of the parent directories): .git 200 | 201 | **解决办法:**你得进入你的工作目录下,然后再git status 或者其它命令就没问题了。 202 | 203 | 204 | 205 | ## 新建分支并关联到远程(github网站) 206 | 207 | 如果远程已经有了分支,请使用章节(从主干下拉分支并关联分支)的命令 208 | 209 | cloudyan@IT0101 /E/wamp/www/webframe/cnBootstrap (master) 210 | $ git branch dev //新建分支 211 | $ git checkout dev //切换分支 212 | $ git branch --list //本地切换至新分支,但此时新分支并未在远程(github网站)新建 213 | * dev 214 | gh-pages 215 | master 216 | 217 | 如果远程没有此分子,那么当你操作push命令时, 218 | 219 | $ git push // 常规操作,系统会提示远程没有当前dev分支,并提示操作方法新建远程分支 220 | fatal: The current branch dev has no upstream branch. 221 | To push the current branch and set the remote as upstream, 222 | 223 | git push --set-upstream origin testing 224 | 225 | 226 | cloudyan@IT0101 /E/git/webtest (testing) 227 | $ git push --set-upstream origin testing // 设置远程分支 228 | Total 0 (delta 0), reused 0 (delta 0) 229 | To git@github.com:pandoraui/webtest.git 230 | * [new branch] testing -> testing 231 | Branch dev set up to track remote branch dev from origin. 232 | 233 | 234 | cloudyan@IT0101 /E/git/webtest (testing) 235 | $ git branch --list //查看分支,新建了分支并切换成功同时与远程分支建立了联系 236 | * testing 237 | master 238 | 239 | 240 | 新建并关联成功 241 | 242 | 243 | ## 从主干下拉分支并关联分支 244 | 245 | 针对远程已经新建了分支, 在本地如何关联远程的分支 246 | 247 | 248 | cloudyan@IT0101 /E/git/webtest (master) 249 | $ git fetch origin 250 | 251 | // 如果你的命令无效,我在win8中使用1.8.3就上述命令执行无效, 252 | // 可以使用 git checkout -t 本地分支名 远程分支名,如: 253 | // git checkout -t v4 origin/v4 //v3项目中的分支v4,分支名同则可省略,如:git checkout -t origin/gh-pages 254 | // 使用 git branch -r可以查看远程分支 255 | 256 | cloudyan@IT0101 /E/git/webtest (master) 257 | $ git checkout dev 258 | Branch dev set up to track remote branch dev from origin. 259 | Switched to a new branch 'dev' 260 | 261 | cloudyan@IT0101 /E/git/webtest (testing) 262 | $ git branch --list 263 | * testing 264 | master 265 | 266 | 关联并操作成功 267 | 268 | 这里是git命令行操作最常用的操作命令以及说明,如下: 269 | 270 | git status //查看修改了什么 271 | git add . //跟踪修改的文件.代表当前文件夹(间接代表当前目录所有文件),也可以用指定的文件 272 | git commit -m "简单的注释,修改了什么" //注意git对中文的支持不太友好,暂未提供优化方法 273 | git push //提交到远程分支(github网站上),如果远程没有此分支,系统会提示如何操作,命令如下: 274 | git push --set-upstream origin proname //对应远程的项目名称proname 275 | 276 | git pull //从远程分支更新(从默认项目分支) 277 | git pull git@github.com:other/useGit.git //从其他项目分支合并更新 278 | 279 | git branch testing //新建分支 280 | git checkout testing //切换分支 281 | git checkout master //切换回主干 282 | 283 | git checkout -b testing //新建分支并切换过去 284 | 相当于执行下面这两条命令: 285 | git branch testing 286 | git checkout testing 287 | 288 | 修改分支testing后合并到主干 289 | git checkout master //首先切换到主干 290 | git merge testing //合并分支testing 291 | 292 | 合并后,testing分支完成历史使命,就可以删掉了 293 | git branch -d testing 294 | 295 | 如果在合并git merge testing的时候,出现了下面的错误提示 296 | Auto-merging index.html 297 | CONFLICT (content): Merge conflict in index.html 298 | Automatic merge failed; fix conflicts and then commit the result. 299 | 产生了冲突,可以git status(逻辑上说,这种问题只能由人来裁决。) 300 | 301 | 如果想新建分支等,可以参看 [Git详解之三 Git分支](https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%AE%80%E4%BB%8B) 302 | 303 | 用的多了就熟练了,Git命令行确实很简单而且功能十分强悍!建议多用用命令行模式。 304 | --------------------------------------------------------------------------------