学习参考:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
1、本地创建了仓库gitlearn,要同步添加到远程
(1) 创建本地仓库,创建一个空目录gitlearn(路径名尽量不包含中文,以免引起不必要的麻烦),在Git Bash中cd进入所建的空目录,输入git init,把这个目录变成git可以管理的仓库。
(2) 创建远程仓库,如在GitHub上创建一个新的仓库gitlearn,为了方便期间,最好同名(不同名不知是否可行?),创建好的远程仓库是空的。
(3) 在本地仓库gitlearn下运行命令:
git remote add origin git@github.com:yourGitHubNam/gitlearn.git
添加后远程库的名字是origin,是git默认的叫法
(4) 把本地库的所有内容推送到远程库
git push –u origin master //把当前分支master推送到远程
第一次推送master分支时,加上-u参数还会把本地的master分支和远程的master分支关联起来,以后push和pull的时候就可以简化命令。
推送本地提交:git push origin master
(5) 本地新建的分支如果不推送到远程,对其他人就是不可见的;从本地推送分支,使用:git push origin branch-name //把本地分支修改推送到远程分支对应的分支上
如果推送失败,先用git pull抓取远程的新提交;这样会把本地的分支和推送到远程的分支关联,并会把本地分支的提交推送到远程分支。
(6) 在本地创建和远程分支对应的分支,使用
git checkout -b branch-name origin/branch-name //本地和远程分支的名称最好一致;
建立本地分支和远程分支的关联,使用
git branch --set-upstream branch-name origin/branch-name;
从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
2、从远程库克隆
(1) 先建立一个远程仓
(2) 在本地电脑建立一个工作区目录,在Git Bash中进入到本地目录,运行命令:
git clone git@github.com:yourName/respositoryName.git
就把远程仓库克隆到了本地。Git支持多种协议,包括http,ssh支持的git协议克隆的速度比较快
3、安装和配置:
(1)Windows版的Git是msysgit,从http://msysgit.github.io/下并安装后,在开始种会有Git Bash和Git Gui工具,Git Bash是git的命令行窗口,Git Gui为可视化git工具;
配置:打开GitBash做相应的配置:带global参数是对本机的所有用户有效
$ git config --global user.name "Your name"//在生成补丁、日志时使用
$ git config --global user.email "youremail" //用户发送补丁
(2)本地仓库和远程如GitHub仓库之间的数据传输室SSH加密的,GitHub需要识别出你推送的提交确实是你推送的;在使用远程仓库之前需要做一些设置,首先创建SSH Key:
ssh-keygen -t rsa -C youremail@example.com
会在主目录生成.ssh目录,下面有文件id_rsa(私钥)和id_rsa.pub(公钥),私钥保证只能本机才能向gitHub中的仓库推送修改,公钥用于在SSH Key中,让别人都看到,确保能看到仓库中的代码。这属于不数据加密,为不对称加密应用。
在GitHub账户的SSH Keys页面添加SSH Key,在GitHub中,Account settings->SSH Keys中,添加SSH Key,title任意,在key文本里粘贴id_rsa.pub文件的内容,确认即可。
4、Git常用命令:
(1) 文件操作命令
git add filename //把工作区的文件放到暂存区
git commit –m “some description” //把暂存区的文件提交到当前分区
git status //查看工作区的状态,告诉我们readme.txt被修改,还没有提交
git diff //查看文件具体有哪些修改,显示为Unix通用的diff格式
git log //查看每次的修改,--pretty=oneline可以简单显示变化
git log - -prettry=online - -abbrev-commit
git reset –-hard HEAD^ //回退到上一个版本
git reset –hard ID //回退到版本号为ID的版本
git reflog //查看所用过的命令记录
gitcheckout –filename //撤销注工作区对文件所做的修改
git resetHEAD filename //把暂存区的修改撤销
git rm test.txt //从版本库删除文件,并git commit–m “remove test.txt”;
(3) 分支命令
git checkout –b dev //(创建并切换到dev分支)=gitbranch dev+git checkout dev
git branch //查看分支,*所在分支为当前分支
git merge dev //(合并dev分支到master分支) Fastforward模式(默认的模式,删除分支后会丢掉分支信息)
git branch –d dev //删除分支
git log –graph //查看分支合并图,但查看后页面后出现(end),不能返回正常命令行,输入q即可
Git merge - -no-ff -m “merge with no-off” dev //-no-ff方式合并分支,还可以从分支历史上看出分支信息
git push origin branch-name //从本地推送分支
git pull //抓取远程的新提交,若有冲突,需要处理冲突;
(4) 工作现场命令
git stash //把当前工作现场存储起来
git stash list //查看以前存储的工作现场
git stash apply //恢复存储的工作现场
git stash drop //删除stash内容
git stash pop //恢复工作现场的同时会把内容删除了
git stash apply stash@{0} //恢复到指定的stash
(5)标签管理
为某个版本打上标签,以后就可以根据标签取得某个指定的版本,标签为指向某个commit的指针。
git tag v1.0 //给当前分支打标签,是最新提交的commit上
git tag //查看所有标签
git log --pretty=oneline --abbrev-commit //查看历史提交的commit id
git tag v0.9 commitID //给指定的commitID打标签
git show v0.9 //查看标签信息
git tag –a v0.1 –m “description” commitID //创建带有说明的标签
git push origin<tagname> //推送一个本地标签;
git push origin –tags //推送全部未推送过的本地标签;
git tag -d<tagname> //删除一个本地标签;
git push origin:refs/tags/<tagname> //删除一个远程标签,须先删除本地标签。
忽略某些文件时,需要编写.gitignore;GitHub准备的配置文件,见:
https://github.com/github/gitignore
.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!