完整的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编辑器界面,不知道咋整也别慌
完整的git提交代码到github流程

  • 首先编辑好你要写的注释信息
  • 按esc确保退出编辑模式
  • ^X就是ctrl+X,紧接着会让你确认是否退出,按y即可(如果没有修改就直接退出不会让你确认,但是这次commit也得重新提交,重新提交的时候还是得写注释hhh)

如果这个时候想换个本地分支提交怎么办

  • 首先你得撤销在这个分支上提交到版本库里的东西
git log --abbrev-commit --graph    #通过图的形式查看自己的git操作历史

完整的git提交代码到github流程
可以看到现在在testb分支上(马赛克打得多了…大家知道这是testb就好。。。
完整的git提交代码到github流程

背景总结:
我们在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的区别大家自己辨析一下吧,其实只要会用一种,达到目的就行,不一定都要会