首页 > 技术文章 > Git笔记(一) 基本指令、常见错误、github检索技巧

SouthBegonia 2020-02-16 13:42 原文

git 操作指令

信息查看

git status		//查看当前暂存区(stage/index)和当前HEAD commit 的区别(注:大部分时候HEAD指向最新分支

git log		    //查看commit历史记录,即便commit_id
git log --graph //查看commit的历史合并线路
git log --oneline --graph //简洁模式查看commit历史记录
git reflog		//查看详细commit历史操作记录(比如版本回退后想要悔棋)

git branch		//查看本地分支
git remote		//查看远程分支
git branch -a   //查看本地及远程的所有分支

git --version	//查看当前git版本

删除、撤销及回退

删除文件:

rm README.txt		//删除当前目录下的README.txt文件,不生成commit记录
git rm README.txt	//删除原本存在于暂存区或者版本库中的README.txt文件,并生成commit记录

撤销修改及回退版本:

1.对未提交到暂存区的、修改了的文件(即 尚未 git add 的)进行撤销:

git checkout -- README.txt
git checkout -- *.txt
git checkout -- *

2.对已经提交暂存区的文件(即 已经 git add 但尚未 git commit 的)进行撤销:

//文件从暂存区回到工作区,实现撤销git add功能
git reset HEAD README.txt
git reset HEAD *.txt
git reset HEAD

3.对 已经 git commit 的文件进行撤销,仅能版本回退

//回退到上1个版本\上N个版本\某个版本,不保留任何工作区或者暂存区文件(慎用
git reset --hard HEAD^
git reset --hard HEAD~N
git reset --hard  commit_id

//回退到上1个版本\上N个版本\某个版本,且保留当前工作区和暂存区文件(推荐
git reset --soft HEAD^
git reset --soft HEAD~N
git reset --soft commit_id

//补充:
--mixed:不删除工作空间改动代码,撤销commit,并且撤销 git add ,git reset --mixed HEAD^ 和 git reset HEAD^ 等价
--soft:不删除工作空间改动代码,撤销 commit,不撤销 git add
--hard:删除工作空间改动代码,撤销 commit,撤销 git add 

分支管理

我们在使用git指令时会遇到 master、HEAD、origin、branch 等词汇,其含义如下,同时推荐佳作:HEAD、master 与 branch - 小强唐

  • branch:分支,指向commit的指针,包含从初始commit到它的所有路径
  • master:在创建本地仓库时,就自动创建的默认主分支
  • HEAD指向当前commit的指针,通常指向最新的commit。除了指向commit还可以指向branch,例如master
  • origin:远程仓库(github)所提供的默认远程分支

分支操作:

git branch			  //查看分支,当前分支带*号

git branch dev		  //创建分支dev
git checkout dev	  //切换到dev分支(注:工作区和暂存区文件可能在分支切换后被消除
git checkout -b dev   //创建并切换到dev分支

git merge dev		  //将dev分支合并到当前分支
git merge --no-ff -m "merge with no-ff" dev  //将dev分支合并到当前分支,并在log中保留dev分支的记录

git branch -d dev 	  //删除dev分支

分支冲突:

假如dev分支和master分支都有新的add和commit,合并时则会造成冲突,冲突消息如下图:

解决措施:根据 git state 定位两个 commit 冲突的文件,如本例的dev.txt。后打开该文件可看到 <<<<<<<,=======,>>>>>>> 标记出不同分支的内容,修改后再 git add、git commit 即可。当然该过程的3次commit都会被记录


关联、推送到远程仓库

首选创建并初始化本地仓库,与远程仓库同名,执行 git init 完成初始化,后找到远程仓库Clone ordownload,以SSH或者HTTPS进行克隆:git remote add origin git@github.com:SouthBegonia/GitLearn.git

git push -u origin master	//首次推送本地master分支到远程仓库、并实现本地远程两master分支关联
git push origin master	    //推送本地master分支到远程仓库
git push origin dev		    //推送本地dev分支到远程仓库

git 常见错误合集

1. git push 超时

  • 问题描述:
Connection reset by 13.250.177.223 port 22
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
  • 问题原因:网络状况不佳
  • 解决方法:待网好重新push

2. git push 时报错

  • 问题描述:

  • 问题原因:远程仓库已存在README.md或.ignore等文件或是在github网页内对文件进行了修改及其commit,但尚未pull到本地就执行push,进而造成冲突
  • 解决方法:先git pull --rebase origin master 把远程仓库有的文件pull到本地,再执行git push -u origin master

3. github网页图片加载慢:

github 检索项目方法

在github中检索优质开源项目是大家家常便饭的事,但单凭官网推送、名字搜索所检索到的项目寥寥无几或是不符合我们的需要,而github的又缺少可视化的高级检索栏,因此我们迫切需要准确的检索方法: 在检索栏中键入各类指令,例如项目名带有某词汇,或是限制项目star数、最新push日期等。更全面的指令参考官方:Searching for repositories - GitHub Help

in:name Unity		 //搜索项目名带有Unity一词的项目
in:readme Unity	     //搜索README ...
in:description 爬虫  //搜索描述 ...

language:C#		     //限制项目语言为C#
istars:>100      	 //限制star数大于100 
forks:>10			 //限制fork数 ...
pushed:>2019-9-03    //最近更新日期 ...

Awesome Unity		 //热门Unity项目

//示例:
in:name RPG in:description Unity istars:>50 language:C#

参考

推荐阅读