完整的git提交代码到github流程
每次遇到报错老是忘,临时查也有点浪费时间,干脆一次性记录下来
- 首先在github上创建一个repository,clone下地址
紧接着在本地工作目录下初始化下
git init #初始化下本地仓库
git remote add <远程仓库名的本地名称> <远程仓库地址(这个就是你刚刚clone的那个东西)>
git remote #可以通过这个查看是否添加远程库成功(可输可不输的一个操作
仓库的粒度上联系起来后,本地和远程分支建联
- 如果在创建远程库的时候添加了Readme.md之类的,要先把分支拉取到本地。这条命令就是取回远程仓库的某条分支并且命名为<本地分支>。注意:<本地分支>一定不能是已经存在了的 , i.e.一定要是新的
git fetch <远程仓库的本地名称> <远程分支>:<本地分支>
但是这条命令不会自动将Head切换到新建立的<本地分支>上去,所以我们要手动切换到<本地分支>上去
git checkout <本地分支名>
紧接着就是git add 、git commit -m了~如果进入了COMMIT_EDITMSG的nano编辑器界面,不知道咋整也别慌
- 首先编辑好你要写的注释信息
- 按esc确保退出编辑模式
- ^X就是ctrl+X,紧接着会让你确认是否退出,按y即可(如果没有修改就直接退出不会让你确认,但是这次commit也得重新提交,重新提交的时候还是得写注释hhh)
如果这个时候想换个本地分支提交怎么办
- 首先你得撤销在这个分支上提交到版本库里的东西
git log --abbrev-commit --graph #通过图的形式查看自己的git操作历史
可以看到现在在testb分支上(马赛克打得多了…大家知道这是testb就好。。。
背景总结:
我们在testb分支上add并且commit了文件,但是我们现在想要把文件在另一个分支上(hesy)提交,咋整?
如果直接
git stash #保存当前分支的所有操作并压入”栈“中
git checkout hesy # 切换到另一个分支准备add、commit
你会发现在testb上commit了的文件在当前工作目录不见了(哭不出来
因为刚刚那些文件已经是被之前那个分支track(跟踪)啦
如果在原分支输入git ls-files就可以查看哪些文件被track(被移到版本库)了
查看还没添加的文件就是 git status 啦~
所以刚刚查看git log的作用就体现出来啦:
git reset <commit id>
- commit id就是那串编码。这样可以回滚到commit id所在的那次操作结束后的时刻,git reset默认是–mixed模式,也就是回滚只改变文件是否被跟踪(in another way: 只改变Head index),文件的修改、编辑情况不会跟着回滚哈~(多好 !
git reset 还可以设置成hard模式(git reset --hard),也就是连文件的修改、编辑情况也一起回滚…
- 然后你就可以切换分支,重新add 、commit啦
git stash
刚才提到了git stash,顺便讲下怎么恢复吧~(要先回到原本的分支哦——git checkout <原分支>
- 查看”栈“里面存储了哪些
git stash list
每个存储有个自己的stash编号(这里只有一个,但其实可以有很多个),这一个的编号是0
- 恢复!
git stash apply [email protected]{编号}
或者
git stash pop
二者区别就是
-
git stash apply [email protected]{编号}
只会恢复stash,反不会删除”栈“里面的stash,我们后面需要再执行git stash drop [email protected]{编号}
进行删除,但是好就好在我可以恢复”栈“里面任意一个stash -
git stash pop
恢复的同时把 stash 存储列表的内容也删了,但是只能恢复”栈“最上方的
补充
- git xxx -h 会在bash里面有简短的说明,而git xxx --help则会弹出一个git xxx的网页版的详细说明
- 版本的回退还有git revert 命令,也可以用git checkout命令,和git reset的区别大家自己辨析一下吧,其实只要会用一种,达到目的就行,不一定都要会