Git使用总结

来源:互联网 发布:mac地址表包括vlan吗 编辑:程序博客网 时间:2024/05/19 11:47

用户配置

配置用户名和邮箱(一般来说需要配置的就这两个)

git config --global user.name "名字"git config --global user.email "邮箱"

查看配置信息

git配置有system级别 global(用户级别)和local(当前仓库)3个,设置先从system(系统级别)->global(用户级别,也就是所有仓库)->local(当前仓库),底层配置会覆盖顶层配置。不加上--属性默认就是给当前的仓库配置的。

查看系统configgit config --system --list查看当前用户(global)配置git config --global  --list查看当前仓库配置信息(需要在仓库中使用)git config --local  --list

初始化仓库,添加文件与提交

初始化仓库git init添加文件git add .git add 文件提交git commit -m "提交信息"

忽略文件

忽略文件的原则是:

  1. 忽略操作系统自动生成的文件,比如缩略图等;
  2. 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
  3. 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。

官方的.gitignore配置文件:

GitHub官方的所有.gitignore文件https://github.com/github/gitignore

编写好.gitignore配置文件之后,只需要添加到仓库即可。但是可能会添加不了,有时候可以使用强制添加:

git add -f .gitignore

查看.gitignore文件与当前仓库中的文件(不能添加新文件的时候,就需要考虑是否被git忽略了)是否有问题:

git check-ignore

版本控制

版本的表示有两种:

  1. 直接用commit id来表示,注意手写输入的时候可以不用完全输入,7位左右就可以了,一般都是直接复制比较好。
  2. 最新的一个用HEAD,然后依次是HEAD^、HEAD^^、HEAD~100等

git的几个重要的分区与指令的关系(Remote先不考虑),如下图所示:


git分区的概念.jpg

下面是一些常用的命令:

查看git状态git status查看git提交日志git loggit log --pretty=oneline查看命令日志git reflog查看对应提交id的内容git show 某一次的提交id查看修改了哪些内容(当前的副本与)(<文件>可以省略),实质上是工作区与暂存区的对比git diff <文件>版本回退(回滚)git reset --hard 某一次的提交id撤销修改1、没有add,实质是使用checkout把版本库的文件更新工作区的文件git checkout -- 文件2、已经add到暂存区了git reset HEAD 文件git checkout -- 文件3、已经提交了,需要版本回退(前提是没有push到远程)git reset --hard 某一次的提交id删除文件(先是文件管理器直接删除,然后通过下面的git命令从仓库中删除)git rm 文件删除错了,通过checkout还原git checkout -- 文件

远程仓库

下面是git分区的完整版,了解这个图有助于加深我们对git的理解:


gity完整分区.png
创建SSH Keyssh-keygen -t rsa -C "邮箱"在远程仓库(例如Github)配置SSH KEY的公钥直接把隐藏文件夹.ssh中的id_rsa.pub的文件内容拷贝粘贴到指定位置保存创建远程仓库直接通过GitHub等图形化网页界面操作关联远程库例子(origin是远程仓库的默认名字)(ssh协议比https协议快)git remote add origin git地址如果远程origin已经存在,那么需要remove一下git remote rm origin第一次推送的时候,把master分支的所有内容都push到远程仓库一般master与dev分支都需要时刻推送更新git push -u origin master之后的push,不用指定-u参数了git push origin master远程仓库-->本地(git已经自动把仓库和远程仓库关联好了,并且,远程仓库的默认名称是origin)git clone git地址查看远程仓库的信息git remotegit remote -v(更详细)创建与远程分支git checkout -b dev origin/dev同时推送同一个分支有冲突的时候,需要先把最新的代码拉下来,解决冲突git branch --set-upstream dev origin/devgit pull
git多人协作流程

多人协作的工作模式通常是这样:

  1. 首先,可以试图用git push origin branch-name推送自己的修改;
  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;如果合并有冲突,则解决冲突,并在本地提交;
  3. 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
  4. 如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。

参与GitHub开源项目:

  1. Fork一个开源仓库。
  2. Fork之后就在自己的GitHub下面有自己的对应的仓库了,然后clone下来,修改提交。
  3. 如果确实需要提交给原作者,那就在GitHub上面申请一个pull request。

分支管理

查看分支查看本地分支git branch查看远程分支git branch -r查看本地和远程分支git branch -a创建分支git branch 分支名切换git checkout 分支名创建+切换分支git checkout -b 分支名删除分支git branch -d 分支名合并某分支到当前分支(一般是dev合并到master,因此需要先切换到master)git merge 分支名不使用fast forward方式的普通合并(合并后的历史有分支,能通过git log看出来曾经做过合并)git merge --no-ff -m "合并提交信息" 分支名查看分支合并信息git log git log --graph解决冲突直接在文件中修改,Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,我们修改保存,然后addcommit即可BUG分支1、开发一部分了,突然来了BUG了,先用git stash把现场保存起来2、创建一个新的BUG分支(这时候之前开发的代码是没有的,因此可以正常编译),解决BUG以后提交然后合并到master分支3、通过git stash apply <stash ID>或者git stash pop <stash ID>还原新功能分支开发新功能的时候最好新建一个分支,如果新功能不需要了,可以把那个分支删除掉,因为这个分支没有合并过,所以需要强制删除git branch -D 分支名

标签管理

打一个标签(commit可省略,默认是HEAD)git tag <commit id>删除一个标签   git tag -d <tag name>显示所有标签git tag显示标签的信息(相当于显示commit的信息)git show 标签名给标签指定信息git tag -a <tag name> -m "标签信息"用PGP签名标签(需要安装pgp)git tag -s <tag name> -m "签名信息" 私钥推送标签到远程git push origin <tag name>git push origin --tags删除远程标签(注意先删除本地的标签)git tag -d <tag name>git push origin :refs/tags/<tag name>

自定义Git

彩色的输出git config --global color.ui true配置别名git config --global alias.co checkoutgit config --global alias.ci commitgit config --global alias.br branchgit config --global alias.unstage 'reset HEAD'git config --global alias.last 'log -1'git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

删除某个配置的时候,直接到用户的主目录下面的隐藏文件.gitconfig,在alias下面删除对应配置。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 有数组$array=array(“a”=>2,”b”=>6,”c”=>5) 有数组$array=array(“a”=>2,”b”=>6,”c”=>5) 有数组$array=array(“a”=>2,”b”=>6,”c”=>5)排序 php对一个数组按某个键值排序 有数组$array=array(“a”=>2,”b”=>6,”c”=>5);用php实现对以上数组进 $array=array(“a”=>2,”b”=>6,”c”=>5);用php实现对以上数组大小排序 $array=array(“a”=>2,”b”=>6,”c”=>5) $array=array(“a”=>2,”b”=>6,”c”=>5)排序 Linux去掉某个文件所有者同组用户的写权限 Linux.sed命令显示某个文件的第五行 Linux输出该文件的奇数行 Linuxsed命令在文件的最后一行插入该文件的的统计信息,包含多少行,多少个单词,多个字符 Linuxcut命令 Linux.cut命令 Linux.cut命令提出a文件中 Linux.cut命令提出a文件中 Linux.ls Linux创建文件 Linux修改文件的时间 Linux创建文件 Linux修改文件的时间 数字图像分析 数字图像分析中科大 希島 斗鱼 中国球轴承反倾销 中国球轴承反倾销案 MMaseagniandHChi.Optimalquasi-MonteCarlovaluationo [10]HoCTB,LiaoCK,KimHTValuingInternetCompanies:ADE javaweb注册界面 子串替换 C子串替换 dijstra mfc mfc鼠标 比较字符串 比较字符串 wiki搭建 kmp算法实现文本文件单词的检索与计数 centos鼠标消失 keypressed