转载自
(1) 首先在本地创建ssh key;
$ ssh-keygen -t rsa -C "[email protected]"
后面的[email protected]改为你的邮箱,之后会要求确认路径和输入密码,我们这使用默认的一路回车就行。成功的话会在~/下生成.ssh文件夹,进去,打开id_rsa.pub,复制里面的key。回到github,进入Account Settings,左边选择SSH Keys,Add SSH Key,title随便填,粘贴key。
(2)为了验证是否成功,在git bash下输入:
$ ssh -T [email protected]
如果是第一次的会提示是否continue,输入yes就会看到:You’ve successfully authenticated, but GitHub does not provide shell access 。这就表示已成功连上github。
(3)接下来我们要做的就是把本地仓库传到github上去,在此之前还需要设置username和email,因为github每次commit都会记录他们。
$ git config --global user.name "your name"
$ git config --global user.email "[email protected]"
(4)进入要上传的仓库,右键git bash,添加远程地址:
$ git remote add origin [email protected]:yourName/yourRepo.git
后面的yourName和yourRepo表示你再github的用户名和刚才新建的仓库,加完之后进入.git,打开config,这里会多出一个remote “origin”内容,这就是刚才添加的远程地址,也可以直接修改config来配置远程地址。origin是该远程仓库的别名,叫其它的也可以(比如myrepo),完成该步骤之后#git remote可以查看当前添加了哪些远程仓库。
4.提交、上传
(1)接下来在本地仓库里添加一些文件,比如README,
$ git add README
git add把README文件添加到暂存区(stage),采用git status命令可以查看暂存区存储了哪些修改。
$ git commit -m "first commit"
git commit把暂存区的内容写入本地仓库,清空暂存区
(2)上传到github:
$ git push origin master
git push命令会将本地仓库推送到远程服务器。
git pull命令则相反。
修改完代码后,使用git status可以查看文件的差别,使用git add 添加要commit的文件,也可以用git add -i来智能添加文件。之后git commit提交本次修改,git push上传到github。
5.gitignore文件
.gitignore顾名思义就是告诉git需要忽略的文件,这是一个很重要并且很实用的文件。一般我们写完代码后会执行编译、调试等操作,这期间会产生很多中间文件和可执行文件,这些都不是代码文件,是不需要git来管理的。我们在git status的时候会看到很多这样的文件,如果用git add -A来添加的话会把他们都加进去,而手动一个个添加的话也太麻烦了。这时我们就需要.gitignore了。比如一般c#的项目我的.gitignore是这样写的:
bin
.suo
obj
bin和obj是编译目录,里面都不是源代码,忽略;suo文件是vs2010的配置文件,不需要。这样你在git status的时候就只会看到源代码文件了,就可以放心的git add -A了。
2、首次clone远程仓库+修改后push
直接复制远程仓库对应的https地址进行clone, 如果不想用默认的名字,可以指定本地的工作区名称(如:wingters)
$ git clone git://github.com/wingter/wingtersproject.git wingters
clone下来是整个文件夹(所以不必提前在本地创建文件夹),会自带有.git, 所以不必在本地进行git init
同时git已经自动的在该工作区进行fetch和merge了
现在可以在本地进行修改,按上面提到的方法add, commit和push
如果push失败(要求先进行Pull),并且确定是本地的仓库更加新,则先进行pull --rebase
$ git pull --rebase wingters master
这样本地就完成了分支合并,git认为远程仓库的之前内容已经合并到本地,接着可以push了。
3、从远程仓库同步到本地(转载自http://www.yiibai.com/git/git_pull.html)
git pull
命令用于从另一个存储库或本地分支获取并集成(整合)。git pull
命令的作用是:取回远程主机某个分支的更新,再与本地的指定分支合并,它的完整格式稍稍有点复杂。
使用语法
git pull [options] [ […]]
Shell
将远程存储库中的更改合并到当前分支中。在默认模式下,git pull
是git fetch
后跟git merge FETCH_HEAD
的缩写。
更准确地说,git pull
使用给定的参数运行git fetch
,并调用git merge
将检索到的分支头合并到当前分支中。 使用--rebase
,它运行git rebase
而不是git merge
。
以下是一些示例 -
$ git pull <远程主机名> <远程分支名>:<本地分支名>
Shell
比如,要取回origin
主机的next
分支,与本地的master
分支合并,需要写成下面这样 -
$ git pull origin next:master
Shell
如果远程分支(next
)要与当前分支合并,则冒号后面的部分可以省略。上面命令可以简写为:
$ git pull origin next
Shell
上面命令表示,取回origin/next
分支,再与当前分支合并。实质上,这等同于先做git fetch
,再执行git merge
。
$ git fetch origin
$ git merge origin/next
Shell
在某些场合,Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在git clone
的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master
分支自动”追踪”origin/master
分支。
Git也允许手动建立追踪关系。
$ git branch --set-upstream master origin/next
Shell
上面命令指定master
分支追踪origin/next
分支。
如果当前分支与远程分支存在追踪关系,git pull
就可以省略远程分支名。
$ git pull origin
Shell
上面命令表示,本地的当前分支自动与对应的origin
主机”追踪分支”(remote-tracking branch)进行合并。
$ git pull
Shell
上面命令表示,当前分支自动与唯一一个追踪分支进行合并。
如果合并需要采用rebase
模式,可以使用–rebase
选项。
$ git pull --rebase <远程主机名> <远程分支名>:<本地分支名>
Shell
git fetch和git pull的区别
$ git fetch origin master
$ git log -p master..origin/master
$ git merge origin/master
Shell
以上命令的含义:
origin
的master
主分支下载最新的版本到origin/master
分支上master
分支和origin/master
分支的差别上述过程其实可以用以下更清晰的方式来进行:
$ git fetch origin master:tmp
$ git diff tmp
$ git merge tmp
Shell
2. git pull:相当于是从远程获取最新版本并merge
到本地
git pull origin master
Shell
上述命令其实相当于git fetch
和 git merge
在实际使用中,git fetch
更安全一些,因为在merge
前,我们可以查看更新情况,然后再决定是否合并。
4、撤回commit之后的部分修改(比如不想提交的文件,且之前还未加入到.gitignore中)
git rm --cache -r idea/
其中-r应用于整个文件夹dir
这样本地仓库里相应的文件记录就被移除了