赞
踩
简单来说:就是从主分支Master中分出分支Feature,然后再合并merge在一起达成代码迭代更新的过程
一些 GitHub 的基本概念:
分支的概念: - master分支,即主分支。任何项目都必须有个这个分支。对项目进行tag或发布版本等操作,都必须在该分支上进行。 develop分支,即开发分支,从master分支上检出。团队成员一般不会直接更改该分支,而是分别从该分支检出自己的feature分支,开发完成后将feature分支上的改动merge回develop分支。同时release分支由此分支检出。
Linux系统安装GitHub比较容易,不再这里讨论了
重点看下怎么在windos系统下安装Git
Git BASH的下载安装
Git命令行的使用
本地git命令行中的使用其实跟在GitHub网页上操作的步骤是相对应的
Git本地配置
打开Git BASH:
1. 首先在本地创建ssh key;
$ ssh-keygen -t rsa -C "your_email@youremail.com"
后面的your_email@youremail.com改为你在github上注册的邮箱,之后会要求确认路径和输入密码,我们这使用默认的一路回车就行。成功的话会在~/下生成.ssh文件夹,进去,打开id_rsa.pub,复制里面的key。
回到github上,进入 Account Settings(账户配置),左边选择SSH Keys,Add SSH Key,title随便填,粘贴在你电脑上生成的key。
为了验证是否成功,在git bash下输入:
$ ssh -T git@github.com
如果是第一次的会提示是否continue,输入yes就会看到:
You've successfully authenticated, but GitHub does not provide shell access
这就表示已成功连上github。
2. 设置你的用户名和电子邮件
github每次commit都会记录他们
- git config --global user.name "Username"
- git config --global user.email "Username@example.com"
git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
touch README.md
git init
git add .
每次增加、删除和修改文件都需要执行此条命令,然后git stautus看看情况
将项目中未被跟踪的文件都加入到仓库中,它不提交这些文件,而只是让git开始关注他们。
如果只想添加某个特定的文件,只需要将.换成特定的名称即可。
git commit -m "有意义的注释语句"
拍摄项目的快照。标志-m 让Git接下里的消息(“Started project")记录到项目中的历史记录中,输出表明我们在分支master 上,而且有一个文件被修改了,可能需要重新配置自己的账号或者名字,再执行上面的代码就会成功
-a
参数表示将所有修改了的文件都加入当前提交中。命令git commit -a
只对状态为M的文件有用,而对新增而为添加的问题是不起作用的,因为我们新添加的文件NewCreateFile仍然处于 Untracked 状态中。 (要先执行git add .
)
git remote add origin https://自己的仓库url地址
与github(远程仓库)建立联系
git push -u origin master
执行完毕后,如果没有异常,会等待几秒,然后跳出一个让我们输入Username 和password的窗口,我们只需要输入个人的github登录账号和密码即可。
git push origin master
推送最新修改; 至此就完成了将本地项目上传到Github的整个过程。(PS:加入创建的项目文件夹里面含有VScode中项目的Python代码,则VScode的整个就被上传到GitHub了)
git status
git log
- $ git log --pretty=oneline
- 5d6cecad80427924b94b14c6fd2bb82a4fa86840 (HEAD -> master) Started project
标志 --pretty=oneline 指定显示一项最重要的信息,提交的引用ID以及为提交记录的消息。
在GitHub -->点入需要删除项目 -->点开setting -->将滚动条滑到底部,找到Danger Zone下的Delete this repository -->点击,会弹出一个警告框,将该项目名称输入进行确认 -->输入密码确认 -->删除成功后,会重新回到个人主界面提醒项目删除成功
Git本地仓库实际上由三个tree组成
- git add <filename>
- git add *
git commit -m "代码提交信息"
git commit -am "备注文字"
标志-a 让Git 将仓库中所有修改了的文件都加入当前提交中,(如果我们两次提交之间加入了新文件,我们执行get add .
操作,将新文件加入到仓库中)标志-m让Git咱提交历史中记录一条消息。
你的改动现在已经在本地仓库的 HEAD 中了。执行如下命令以将这些改动提交到远端仓库:
$ git push origin (指定分支名称)
git remote add origin <server>
如此你就能够将你的改动推送到所添加的服务器上去了。
git clone 是用来从已有的 Git 仓库克隆出一个新的镜像仓库到本地的。 有些时候需要带着用户名和密码进行clone
1. 创建本地仓库的克隆版本: git clone /path/to/repository
2. 创建远端服务器上的克隆版本: git clone username@host:/path/to/repository
该命令会在本地主机生成一个目录,与远程主机的版本库同名。
3.如果要指定不同的目录名,可以将目录名作为git clone
命令的第二个参数。$ git clone <版本库的网址> <本地目录名>
git clone支持多种协议,除了HTTP(s)以外,还支持SSH、Git、本地文件协议等,下面是一些例子。$ git clone http[s]://example.com/path/to/repo.git/
$ git clone ssh://example.com/path/to/repo.git/
$ git clone git://example.com/path/to/repo.git/
$ git clone /opt/git/project.git
$ git clone file:///opt/git/project.git
$ git clone ftp[s]://example.com/path/to/repo.git/
$ git clone rsync://example.com/path/to/repo.git/
SSH协议还有另一种写法:$ git clone [user@]example.com:path/to/repo.git/
通常来说,Git协议下载速度最快,SSH协议用于需要用户认证的场合。各种协议优劣的详细讨论请参考官方文档。
使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。
git clone -b 分支名 <版本库的网址>
更多:
git clone -b 相关
git clone几种可选参数的使用与区别
git clone 子模块
加快git clone 几十倍速度的小方法 (30KB vs 2M)
Git基本使用方法——clone项目到本地
分支是用来将特性开发绝缘开来的。在你创建仓库的时候,master 是"默认的"分支。在其他分支上进行开发,完成后再将它们合并到主分支上。
git checkout -b feature_x
git checkout master
git branch -d feature_x
git push origin <branch>
git checkout -- 文件名
还原回来。其实就是 用版本库里的版本替换工作区的版本,无论工作区是修改还是删除。
在分支修改完代码后,就可以合并代码到master上
git diff <source_branch> <target_branch>
git pull
以在你的工作目录中 获取(fetch) 并 合并(merge) 远端的改动。 git merge <branch>
git add <filename>
为软件发布创建标签是推荐的。这个概念早已存在,在 SVN 中也有。你可以执行如下命令创建一个叫做 1.0.0 的标签:
git tag 1.0.0 1b2e1d63ff
1b2e1d63ff 是你想要标记的提交 ID 的前 10 位字符。可以使用下列命令获取提交 ID:
git log
你也可以使用少一点的提交 ID 前几位,只要它的指向具有唯一性。
git checkout -- <filename>
此命令会使用 HEAD 中的最新内容替换掉你的工作目录中的文件。已添加到暂存区的改动以及新文件都不会受到影响。 注意:对未暂存的修改文件进行回滚的操作命令生效了,再想找回被丢弃的内容就找不回了,此操作是不可逆的
git fetch origin git reset --hard origin/master
git reset HEAD <文件名>
git revert <commit_id>
操作实现以退为进, git revert
不同于 git reset
它不会擦除"回退"之后的 commit_id ,而是正常的当做一次"commit",产生一次新的操作记录,所以可以push,不会让你再pull 。 - 还原一个版本的修改,必须提供一个具体的Git版本号:
- 例如'git revert bbaf6fb5060b4875b18ff9ff637ce118256d6f20',Git的版本号都是生成的一个哈希值
--pretty=oneline
参数可以简洁的显示commit
和说明,注意--pretty=oneline
参数要写在具体文件前。HEAD
表示当前版本,上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
。git reset --hard HEAD^
git reset --hard "commit id"
这样就可以去到指定commit id的版本。
版本号没必要写全,前几位就可以了,Git会自动去找,只要保证id唯一就行。
本地是配了github的ssh-key的,所以也是支持ssh的链接的。下方我们将根据 git remote 远程仓库操作来添加上ssh的仓库地址。
查看和修改远端地址
为了便于管理,Git要求每个远程主机都必须指定一个主机名。
git remote
命令就用于管理主机名。
$ git remote origin
-v
选项,可以参看远程主机的网址。 - $ git remote
- origin https://github.com/BioAIEvolu/GitHub_Learning.git (fetch)
- origin https://github.com/BioAIEvolu/GitHub_Learning.git (push)
上面命令的结果表示,当前只有一台远程主机,叫做origin,以及它的网址。
- $ git clone -o jQuery https://github.com/jquery/jquery.git
- $ git remote
- jQuery
上面命令表示,克隆的时候,指定远程主机叫做jQuery。
git remote show
命令加上主机名,可以查看该主机的详细信息。 $ git remote show origin
git remote add
命令用于添加远程主机。 $ git remote add <主机名> <网址>
git remote rm
命令用于删除远程主机。 $ git remote rm <主机名>
git remote rename
命令用于远程主机的改名。 $ git remote rename <原主机名> <新主机名>
git fetch
命令。 $ git fetch <远程主机名>
git fetch命令通常用来查看其他人的进程,因为它取回的代码对你本地的开发代码没有影响。
默认情况下,git fetch取回所有分支(branch)的更新。如果只想取回特定分支的更新,可以指定分支名。
$ git fetch <远程主机名> <分支名>
比如,取回origin主机的master分支。
$ git fetch origin master
所取回的更新,在本地主机上要用"远程主机名/分支名"的形式读取。比如origin
主机的master
,就要用origin/master
读取。
git branch
命令的-r
选项,可以用来查看远程分支,-a
选项查看所有分支 - $ git branch -r
- origin/master
-
- $ git branch -a
- feature
取回远程主机的更新以后,可以在它的基础上,使用git checkout
命令创建一个新的分支。
$ git checkout -b newBrach origin/master
上面命令表示,在origin/master
的基础上,创建一个新分支。
git merge
命令或者git rebase
命令,在本地分支上合并远程分支。- $ git merge origin/master
- # 或者
- $ git rebase origin/master
上面命令表示在当前分支上,合并origin/master
git pull
命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。它的完整格式稍稍有点复杂。 $ git pull <远程主机名> <远程分支名>:<本地分支名>
比如,取回origin主机的next分支,与本地的master分支合并,需要写成下面这样:
$ git pull origin next:master
$ git pull origin next
上面命令表示,取回origin/next分支,再与当前分支合并。实质上,这等同于先做git fetch
,再做git merge
。
- $ git fetch origin
- $ git merge origin/next
git clone
的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master
分支自动"追踪"origin/master
分支。 Git也允许手动建立追踪关系。
git branch --set-upstream master origin/next
上面命令指定master分支追踪origin/next分支。
git pull
就可以省略远程分支名。$ git pull origin
上面命令表示,本地的当前分支自动与对应的origin
主机"追踪分支"(remote-tracking branch)进行合并。
$ git pull
上面命令表示,当前分支自动与唯一一个追踪分支进行合并。
rebase
模式,可以使用--rebase
选项。 $ git pull --rebase <远程主机名> <远程分支名>:<本地分支名>
git pull
不会在拉取远程分支的时候,删除对应的本地分支。这是为了防止,由于其他人操作了远程主机,导致git pull
不知不觉删除了本地分支。 但是,你可以改变这个行为,加上参数 -p
就会在本地删除远程已经删除的分支。
- $ git pull -p
- # 等同于下面的命令
- $ git fetch --prune origin
- $ git fetch -p
git push
命令用于将本地分支的更新,推送到远程主机。它的格式与git pull
命令相仿。 $ git push <远程主机名> <本地分支名>:<远程分支名>
git pull
是<远程分支>:<本地分支>,而git push
是<本地分支>:<远程分支>。 $ git push origin master
上面命令表示,将本地的master
分支推送到origin
主机的master
分支。如果后者不存在,则会被新建。 $ git push origin :master # 等同于 $ git push origin --delete master
上面命令表示删除origin
主机的master
分支。 $ git push origin
上面命令表示,将当前分支推送到origin主机的对应分支。 $ git push
-u
选项指定一个默认主机,这样后面就可以不加任何参数使用git push
$ git push -u origin master
上面命令将本地的master
分支推送到origin
主机,同时指定origin
为默认主机,后面就可以不加任何参数使用git push
了。
git push
,默认只推送当前分支,这叫做simple方式。 此外,还有一种matching方式,会推送所有有对应的远程分支的本地分支。Git 2.0版本之前,默认采用matching
方法,现在改为默认采用simple
方式。
如果要修改这个设置,可以采用git config
命令。
- $ git config --global push.default matching
- # 或者
- $ git config --global push.default simple
--all
选项。 $ git push --all origin
上面命令表示,将所有本地分支都推送到origin
主机。
git pull
合并差异,然后再推送到远程主机。 这时,如果你一定要推送,可以使用--force
选项。
$ git push --force origin
上面命令使用--force
选项,结果导致远程主机上更新的版本被覆盖。除非你很确定要这样做,否则应该尽量避免使用--force
选项。
git push
不会推送标签(tag),除非使用--tags
选项。 $ git push origin --tags
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。