【0009】Git的使用
【0009-001:参考文章及书籍】
(1)Windows版软件下载地址:
https://git-for-windows.github.io/
(2)Ubuntu下载命令:
apt-get install git
(3)参考文章:
【01】http://www.linuxidc.com/Linux/2016-10/136376.htm
【0009-002:常用的命令】
=========================
(4)日常使用指南
Git初入
如果是第一次使用Git,你需要设置署名和邮箱:
$ git config --global user.name "用户名" $ git config --global user.email "电子邮箱"查看用户名和邮箱地址:$ git config user.name $ git config user.email
将代码仓库clone到本地,其实就是将代码复制到你的机器里,并交由Git来管理:
$ git clone git@github.com:someone/symfony-docs-chs.git
你可以修改复制到本地的代码了(symfony-docs-chs项目里都是rst格式的文档)。当你觉得完成了一定的工作量,想做个阶段性的提交:
向这个本地的代码仓库添加当前目录的所有改动:
$ git add .
或者只是添加某个文件:
$ git add -p
我们可以输入
$git status
来看现在的状态,如下图是添加之前的:
Before add
下面是添加之后 的
After add
可以看到状态的变化是从黄色到绿色,即unstage到add。
三、推送至远程仓库
先在远程端建一个仓库" front end subjects",不要用中文,然后复制路径,再在git bash中输入命令:git remote add origin git@github.com:CynScm/front-end-subjects.git 添加远程仓库。然后输入命令:git push -u origin master 推送至远程仓库的master分支(其中origin是标识符,可以随便取,后面的路径可以选择ssh或者https形式的路径),最终远端就有了上传的小项目了,如图:



现在如果我再添加一个项目到这个仓库里,那么应该怎么在本地更新,简单起见,我新建一个README.md来代替才能使远程仓库也同步更新呢?
四 如何解决failed to push some refs to git
https://jingyan.baidu.com/article/f3e34a12a25bc8f5ea65354a.html
Administrator@PC-20150110FGWU /K/cocos2d/yc (master)
$ git push -u origin master
To git@github.com:yangchao0718/cocos2d.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:yangchao0718/cocos2d.git
hint: Updates were rejected because the tip of your current branch is behin
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
方法/步骤
-
在使用git 对源代码进行push到gitHub时可能会出错,信息如下
-
此时很多人会尝试下面的命令把当前分支代码上传到master分支上。
$ git push -u origin master
但依然没能解决问题
-
出现错误的主要原因是github中的README.md文件不在本地代码目录中
-
可以通过如下命令进行代码合并【注:pull=fetch+merge]
git pull --rebase origin master
-
执行上面代码后可以看到本地代码库中多了README.md文件
-
此时再执行语句 git push -u origin master即可完成代码上传到github
=======================================
【8】git问题Everything up-to-date解决
出现这个问题的原因是git提交改动到缓存,要push的时候不会将本地所有的分支都push掉,所以出现这个问题。我们应该告诉git提交哪个分支。
这里有种特殊的情况是如果你是fork别人的仓库再clone到本地的话,即使git上只有一个主分支,他还是可能出现这个错误。那么我们就需要新建分支提交改动然后合并分支。
接下来先创建一个新分支提交改动
- $ git branch newbranch
然后输入这条命令检查是否创建成功
- $ git branch
这时输出
- branch
- master
这样就创建成功了,前面的*代表的是当前你所在的工作分支。我们接下来就要切换工作分支。
- $ git checkout newbranch
这样就切换完了,可以 $ git branch确认下。然后你要将你的改动提交到新的分支上。
- $ git add .
- $ git commit -a
此时可以 $ git status检查下提交情况。如果提交成功,我们接下来就要回主分支了,代码和之前一样。
- $ git checkout master
然后我们要将新分支提交的改动合并到主分支上
- $ git merge newbranch
合并分支可能产生冲突这是正常的,虽然我们这是新建的分支不会产生冲突,但还是在这里记录下。下面的代码可以查看产生冲突的文件,然后做对应的修改再提交一次就可以了。
- $ git diff
我们的问题就解决了,接下来就可以push代码了。
- $ git push -u origin master
新建分支的朋友别忘了删除这个分支
- $ git branch -D newbranch
如果想保留分支只是想删除已经合并的部分只要把大写的D改成小写的d就行了。
【9】git上传报错
AAA@DESKTOP-FFCJ8AI MINGW64 /h/002_QT/003_Qt/0002_Qt_WindowAndDialog (master) $ git push origin master Logon failed, use ctrl+c to cancel basic credential prompt. Username for 'https://github.com': xxx To https://github.com/CodingManPP/0002_Qt_WindowAndDialog.git ! [rejected] master -> master (fetch first) error: failed to push some refs to 'https://github.com/CodingManPP/0002_Qt_WindowAndDialog.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.
[解决方法]
1、先拉下来,会自动合并的(不用操心)
git pull origin master
2、再上传
git push -u origin master
【10】git push origin与git push -u 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方式。
【11】commit 撤销
写完代码后,我们一般这样
git add . //添加所有文件
git commit -m "本功能全部完成"
执行完commit后,想撤回commit,怎么办?
这样凉拌:
git reset --soft HEAD^
这样就成功的撤销了你的commit
注意,仅仅是撤回commit操作,您写的代码仍然保留。
说一下个人理解:
HEAD^的意思是上一个版本,也可以写成HEAD~1
如果你进行了2次commit,想都撤回,可以使用HEAD~2
至于这几个参数:
--mixed
意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作
这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。
--soft
不删除工作空间改动代码,撤销commit,不撤销git add .
--hard
删除工作空间改动代码,撤销commit,撤销git add .
注意完成这个操作后,就恢复到了上一次的commit状态。
顺便说一下,如果commit注释写错了,只是想改一下注释,只需要:
git commit --amend
此时会进入默认vim编辑器,修改注释完毕后保存就好了。
浙公网安备 33010602011771号