1、首先为了防止每次都需要输入GitHub账号密码进行数据push,我们采用配置SSH的方式
先在本地初始化一个仓库
2、如果你没有 Github 可以在官网 https://github.com/注册。
由于你的本地 Git 仓库和 GitHub 仓库之间的传输是通过SSH加密的,所以我们需要配置验证信息:
使用以下命令生成 SSH Key:(后面的 your_email@youremail.com 改为你在 Github 上注册的邮箱,之后会要求确认路径和输入密码,我们这使用默认的一路回车就行。)
ssh-keygen -t rsa -C "youremail@example.com"
成功的话会在C:Users(你登陆的用户名).ssh下会有一个id_rsa.pub的文件
.pub结尾那个为公钥,以文本方式打开它,复制全部内容,粘贴到你的GitHub上面
左边选择 SSH and GPG keys,然后点击 New SSH key 按钮,title 设置标题,可以随便填,粘贴在你电脑上生成的 key。
添加成功之后显示:
验证是否连接成功
$ ssh -T git@github.com
The authenticity of host 'github.com (52.74.223.119)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes # 输入 yes
Warning: Permanently added 'github.com,52.74.223.119' (RSA) to the list of known hosts.
Hi tianqixin! You've successfully authenticated, but GitHub does not provide shell access. # 成功信息
3、在github上创建一个仓库
4、创建成功后,显示如下信息
上面这张图要注意,SSH后面对应一个链接,HTTPS后面也对应一个链接。我们要使用SSH后面对应那个链接(也就是用git@github.com:tianqixin/runoob-git-test.git)
使用HTTPS那个你在使用github远程仓库的时候会弹出来一个框,让你登录GitHub
SSH也可以在这
5、把工作区的资源文件提交到暂存区
这里我们的工作区就是刚才你使用git init命令初始化之后那个目录
你先弄几个文件放在这个目录下
然后我们使用
git add ./* #把当前目录下全部文件都放到暂存区
git add (具体文件名) #把某文件存放到暂存区中
之后需要提交commit,把暂存区文件放到版本库中
git commit -m "添加 README.md 文件" # 提交并备注信息
远程连接到GitHub中的某库
git remote add origin git@github.com:tianqixin/runoob-git-test.git
这个origin是我们给这个远程连接的库起的一个名字,你使用git remote命令可以查看远程连接的所有库的在本地的名字,加上-v选项会显示更多信息
$ git remote
origin
$ git remote -v
origin git@github.com:tianqixin/runoob-git-test.git (fetch)
origin git@github.com:tianqixin/runoob-git-test.git (push)
然后把本地仓库的master提交到远程仓库(本地化名为origin)
git push -u origin master
6、git push出现的问题
有时候你用完git push之后会出现下面情况
$ git push -u origin master Everything up-to-date Branch 'master' set up to track remote branch 'master' from 'origin'.
刚开始我以为没出现红字就不算错误,但是我push之后就和没有操作一样,远程仓库没变化,我就一直找不到我操作哪里出错,把输出信息一搜才知道这就是报错了。。。
解决办法:
1、移除
git remote rm origin
2、再次连接
git remote add origin ‘仓库地址’
7、出现错误 failed to push some refs to ‘’
$ git push -u origin master
To github.com:qweqwe/Test.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'github.com:qweqwe/Test.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
解决:
一般原因:当我们在github版本库中发现一个问题后,你在github上对它进行了在线的修改;或者你直接在github上的某个库中添加readme文件或者其他什么文件,但是没有对本地库进行同步。这个时候当你再次有commit想要从本地库提交到远程的github库中时就会出现push失败的问题。
使用指令:git pull --rebase origin master
这条指令的意思是把远程库中的更新合并到本地库中,-rebase的作用是取消掉本地库中刚刚的commit,并把他们接到更新后的版本库之中。
git pull –rebase origin master意为先取消commit记录,并且把它们临时 保存为补丁(patch)(这些补丁放到”.git/rebase”目录中),之后同步远程库到本地,最后合并补丁到本地库之中。
接下来就可以把本地库push到远程库当中了。
8、git push --rebase作用
git pull = git fetch + git merge FETCH_HEAD
git pull --rebase = git fetch + git rebase FETCH_HEAD
那么来看看git rebase, 在master执行git rebase tmp,操作之后的分支如下:
二者对比可知,rebase没有产生新的节点,使用rebase的git演进路线(提交树)是一直向前的,这样在版本回退时也很容易,用merge的git路线是跳跃的,如果版本回退你也找不到自己想要的版本,如果在merge时出现了冲突那就麻烦了,当前merge就不能继续进行下去,需要手动修改冲突内容后,add,commit, push. 而rebase 操作的话,会中断rebase,同时会提示去解决冲突。解决冲突后, 再执行 git rebase –continue 继续操作,再git push.
8、git的一些操作命令
1)git show branch:file
解释:
Where branch can be any ref (branch, tag, HEAD, ...) and file is the full path of the file. To export it you could use
2)git show branch:file > exported_file
解释:
A simple, newbie friendly way for looking into a file: git gui browser <branch>
which lets you explore the contents of any file.
It's also there in the File menu of git gui
. Most other -more advanced- GUI wrappers (Qgit, Egit, etc..) offer browsing/opening files as well.
9、git add permission denied
git add .
当执行这步操作的时候,发现有permission denied的提示,这里报错的可能性
1)文本作为只读性文本,需要修改文件夹属性
2)就是ide 编辑器占用,没有保存等可能相关的操作都有可能致使我们提交不上我们的代码
这时候就需要关闭ide 当前所使用的编辑器,然后重开就可以,再继续往下做git的操作(我的是这个原因)
10、git push -u origin master 中-u的作用
加了参数-u后,以后即可直接用git push 代替git push origin master
11、git push <远程主机名> <本地分支名> <远程分支名>
原文:https://www.cnblogs.com/qianqiannian/p/6008140.html
git push的一般形式为 git push <远程主机名> <本地分支名> <远程分支名> ,例如 git push origin master:refs/for/master ,即是将本地的master分支推送到远程主机origin上的对应master分支, origin 是远程主机名,第一个master是本地分支名,第二个master是远程分支名。
11.1 git push origin master
如果远程分支被省略,如上则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建
11.2 git push origin :refs/for/master
如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支,等同于 git push origin --delete master
11.3 git push origin
如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到origin主机的对应分支
11.4 git push
如果当前分支只有一个远程分支,那么主机名都可以省略,形如 git push,可以使用git branch -r ,查看远程的分支名
11.5 git push 的其他命令
这几个常见的用法已足以满足我们日常开发的使用了,还有几个扩展的用法,如下:
(1) git push -u origin master 如果当前分支与多个主机存在追踪关系,则可以使用 -u 参数指定一个默认主机,这样后面就可以不加任何参数使用git push,
不带任何参数的git push,默认只推送当前分支,这叫做simple方式,还有一种matching方式,会推送所有有对应的远程分支的本地分支, Git 2.0之前默认使用matching,现在改为simple方式
如果想更改设置,可以使用git config命令。git config --global push.default matching OR git config --global push.default simple;可以使用git config -l 查看配置
(2) git push --all origin 当遇到这种情况就是不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要 -all 选项
(3) git push --force origin git push的时候需要本地先git pull更新到跟服务器版本一致,如果本地版本库比远程服务器上的低,那么一般会提示你git pull更新,如果一定要提交,那么可以使用这个命令。
(4) git push origin --tags //git push 的时候不会推送分支,如果一定要推送标签的话那么可以使用这个命令
11.6 关于 refs/for
// refs/for 的意义在于我们提交代码到服务器之后是需要经过code review 之后才能进行merge的,而refs/heads 不需要
参考链接:https://www.cnblogs.com/Rainingday/p/12364690.html
https://www.runoob.com/git/git-remote-repo.html
https://blog.csdn.net/yao_hou/article/details/108178717
https://www.cnblogs.com/yiduobaozhiblog1/p/9125465.html