Git & Github使用总结

本文总结了Git 和 Github各种常用操作,便于速查。

Git签名设置

配置git签名,注意--global代表系统用户(配置文件存放~/.gitconfig) ,如果没有的的话,代表的是某一个项目的用户签名(这个时候配置文件的位置是.git/config文件)

git config --global user.name "your name"
git config --global user.email "your email"

设置VS code 为默认编辑器

git config --global core.editor "code --wait"

ssh关联github

在git中设置ssh key和将git和github进行关联
ssh-keygen -t rsa -C "your email"

进入github,点击设置,进入ssh,然后点击add ssh
命名一个title,然后将 ~/.ssh/id_rsa.pub里面的内容复制进去然后就完成了关联。
如果忘记密码,则输入这个口令即可
git config --system --unset credential.helper

基础操作

修改提交

git init //初始化一个仓库

git clone git@github.com:taaccoo-beta/helloGitHub //克隆仓库到本地
git status //查看状态

git add file //将更改后的file加入到中间库中也就是stagging area中
git rm --cached file_name //从stagging area取回

git commit -m "preview" //提交到最终库
git commit //设置了vscode会使用vscode编辑器编辑

git commit --amend //修改最后一次提交的注释信息

add+commit 一起进行
git commit -a -m "xx"

显示日志

git log
git log --pretty=oneline //每一个日志段落变成一行显示
git log --oneline //签名哈希索引值进一步缩写
git reflog // 额外显示当前head到每一个版本需要移动的步数
只显示某个文件的提交日志:

额外显示文件的改动:

版本进退

git reset --hard 0f53962 //最后 索引值(缩写),这个命令可进可退
git reset --hard HEAD^^ // 几个^表示后退几步,只能后退
git reset --hard HEAD~3 // 表示后退三步,只能后退


除了--hard参数以外还有 --soft 和--mixed参数
--soft 移动本地库的指针,暂存区和工作区不变,这样本质上就等价于修改了信息,但是还未commit,所以就等价于回退了commit的信息,再次commit等价于将几个版本的内容一起commit了
--mixed 移动本地库和暂存区,工作区不变,这样等价于回退了commit和add,相当于撤销了commit 和 add 操作


git revert commit_id // 撤销上次commit并且把撤销这一动作作为一个新的commit
git revert commit_id_n commit_id_n+x //撤销 n到n+x之间的commit
git revert -n commit_id // 撤销上次commit,但是不会提交commit,需要手工进行commit
撤销commit等价于版本回退,只不过回退也作为了一次commit

文件比较

git diff //直接比较工作区和暂存区内容的区别
git diff file_name //比较某一个文件在工作区和暂存区的变化
git diff HEAD file_name //比较工作区和本地库的区别
git diff HEAD^ file_name //比较工作区和本地库上一个版本的区别
git diff id1,id2 //会显示仓库中两个版本的区别
git diff topic master //比较两个分支最近的版本的差异

分支功能

git branch //查看分支
git branch -v //查看分支(详细)
git branch sidebar //创建一个sidebar分支
git checkout sidebar //使用checkout切换分支
git checkout -b sidebar2 //创建sidebar分支并切换到这个分支上
git branch -d xx //删除xx分支


合并分支
git checkout branch_name //切换到接受分支和并的目录上
git merge branch_name //合并改分支

解决冲突

当出现冲突的时候,git会给与提示,而出现冲突的文件也会出现提示内容
image.png
修改后执行下面指令就完成了合并
git add file_name
git commit -m "xx"

标签

git tag -a v1 //会为最近的commit创建一个标签
git tag -d v1.0 //删除标签
git tag -a v1.0 id //给之前的commit贴上标签
git tag -a v1.0 -m "xx" //带注释的tag


git tag 列出所有tag
git tag -l 'v1.*' //列出所有v1.开头的tag

git show v1.0 //查看tag细节

由于tag不会自动上传到github,所以如果要push到github,需要下面指令将tag也push 上去
git push origin --tags

Github操作

基础设置

git remote -v //查看当前本地库对应的远程仓库


设置远程仓库别名,设置为origin,如果是本地新建的远程仓库需要这个操作,如果是直接clone的则不需要,会默认设置为origin
git remote add origin https://github.com/xxxx.git


推送,origin代表远程仓库的别名
git push origin master

从远程仓库拉取

git pull
pull等价于 fetch 和 merge 两个操作
git pull = git fetch + git merge
git fetch origin master
git merge origin/master (注意这里是斜杠)

rebase功能

部分参考自 https://www.jianshu.com/p/4a8f4af4e803

rebase的作用是在线性的commit上进行操作,对其进行增删查改,这个功能最好只在自己的独立的项目中使用,或者自己开发的分支上使用,不要用于修改他人开发的分支
使用指令之后,会弹出编辑界面,编辑命令有以下几个:

  • pick:保留该commit(缩写:p)
  • reword:保留该commit,但我需要修改该commit的注释(缩写:r)
  • edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
  • squash:将该commit和前一个commit合并(缩写:s)
  • fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
  • exec:执行shell命令(缩写:x)
  • drop:我要丢弃该commit(缩写:d)


功能一: 合并多个commit到一个commit,例如A-B-C-D ==> A-B'
git rebase -i  [startpoint]  [endpoint] //不包括startpoint


功能二: 将一个分支上的commit复制到另外一个分支上
git rebase   [startpoint]   [endpoint]  --onto  [branchName]
git  rebase   90bc0045b^   5de0da9f2   --onto master
这个时候,还需要将指针头指向复制过去的分支的末端
git checkout master
git reset --hard  0c72e64


功能三:避免冲突的时候,进行两次提交,由于push冲突的时候,需要pull,然后更改在add 和commit,通过--rebase, 就可以把更改后的commit更更改前的commit进行合并,这样避免合伙人产生误会。
git pull --rebase = git fetch + git rebase
如果遇见冲突的时候,只需要
git add
git rebase --continue 这样就可以和最近的commit合并,而不需要像通常的add + commit(这样等于多了一个commit)

协同开发时的冲突处理

假设一个人已经更改一个文件,并且push
另外一个人发现冲突时,需要进行pull,然后解决冲突,在进行push,这个时候更本地冲突解决方法是一样的。


跨团队合作

  • 首先fork代码
  • 编辑代码(操作等同于操作本地库)
  • pull request


对于在本地新建的本地分支,如果执行git push origin my_remote_branch_name是不会将my_remote_branch_name设置为新建的本地分支在远程库origin中的upstream分支的,可以执行如下操作,为本地当前分支设置upstream:
git push --set-upstream origin my_remote_branch_name
或者
git push --set-upstream origin my_remote_branch_name

忽略特殊文件

https://github.com/github/gitignore

Git工作流

https://segmentfault.com/a/1190000002918123

posted @ 2020-09-11 14:36  Neo0oeN  阅读(125)  评论(0编辑  收藏  举报