Git--Command

Clone后提交教程如下:

1. Common Command

--设置代理:
		//设置全局代理
		//http
		git config --global https.proxy http://127.0.0.1:1080
		//https
		git config --global https.proxy https://127.0.0.1:1080
		#含有用户名密码的代理
		git config --global http.proxy http://username:[email protected]:1080
		特殊字符,需转义后再使用,如密码中含有@符号
		git config --global http.proxy http://username:pass@@[email protected]:1080 就要变成:
		git config --global http.proxy http://username:pass%40%[email protected]:1080
		特殊字符在线转换工具:http://www.wetools.com/url-encode
		
		//使用socks5代理的 例如ss,ssr 1080是windows下ss的默认代理端口,mac下不同,或者有自定义的,根据自己的改
		git config --global http.proxy socks5://127.0.0.1:1080
		git config --global https.proxy socks5://127.0.0.1:1080

		/只对github.com使用代理,其他仓库不走代理
		git config --global http.https://github.com.proxy socks5://127.0.0.1:1080
		git config --global https.https://github.com.proxy socks5://127.0.0.1:1080
		//取消github代理
		git config --global --unset http.https://github.com.proxy
		git config --global --unset https.https://github.com.proxy
		
		//取消全局代理
		git config --global --unset http.proxy
		git config --global --unset https.proxy

		 git config --global cor.autocrlf false #不推荐这样设置,会出现未改变代码却 git diff 发现很多代码都变了
		 #windows 一般设置为 git config --global cor.autocrlf true
--取消代理
	git config --global --unset http.proxy
	
	git config --global --unset https.proxy


1.configure 
git config --global user.name "Your Name" 
git config --global user.email "[email protected]"

git连接有两种(推荐2)1.https 用persional access tokens #适用github上https那个连接方式,例:https://github.com/Panor520/LinuxxxCode.git
	#配置过程自行百度,这个有个弊端每次push都会提示输入用户名和密码 很烦人。
	配了这个也只能clone HTTPS地址,如:https://gitee.com/LPCloud/pangitee.git 
	
2.SSH and GPK #适用于github上git那个链接方式,例:[email protected]:Panor520/LinuxxxCode.git
	#下面是创建key的教程
	#创建SSH Key(邮箱要和github上的邮箱一样)
	ssh-keygen -t rsa -C "[email protected]"
	#(把id_rsa.pub里的公钥复制到github上的ssh密钥里即可,之后的用户名密码什么的直接回车就行,其中有一个确认的过程 “y/n” 选yes )
	cat ~/.ssh/id_rsa.pub #查看密钥
	最后将查看的密钥复制粘贴添加到github的ssh公钥里,再次提交该电脑就不用重复输密码了。
	配置了这个就可以 clone SSH地址,如:[email protected]:LPCloud/pangitee.git 
	
2.常用命令

#做了操作后每次都执行下下面命令,然后会出现提示语句,然后接着操作
git status


clone: #连接远程库
	git clone https://github.com/ue90/c_test.git
	git clone -b 分支名 地址 #指定分支语法 
	
	git clone 在 url中添加用户名和密码:
	格式: git clone https://Username:[email protected]/dong_yehao/SysmonSearch.git
	其中, Username包含 @符号要换成%40, 例如 884101054@qq.com要换成884101054%40qq.com。
	
branch: #分支管理
	git branch mybranch #创建分支mybranch
	git checkout -b erajiezhang	#创建分支,并切换(最后面是分支名)
	git branch -d erajiezhang	#删除分支(最后面是分支名)
	git checkout mybranch #切换分支
	git branch	#查看当前分支
	
	git branch --set-upstream-to=origin/<branch> localbranch #指定远端分支和本地分支建立连接
	#解释: origin/指的是远端分支,localbranch就是本地分支名字
	
	git merge <name> #合并某分支到当前分支(最后面是分支名)
	git checkout -b branch-name origin/branch-name #在本地创建和远程分支对应的分支


Git设置远程库相关:
		git remote -v 				#查看您要同步的仓库的远程库列表
		git remote rm   远程库名		#删除已经存在的远程库
		
		git remote add 远程库名 远程库地址		#添加远程库
			eg: git remote add gitee [email protected]:xxx/xxx.git
		
		添加新远程库后,可以指定本地分支连接的远程的分支。
		git branch --set-upstream-to=gitee/master	#设置指定分支
		git pull gitee   						#指定完对应分支,pull时不用特意指定
		git pull 远程库名 分支名					#不指定分支,pull需指定分支
			eg:git pull gitee master
	
diff:
	git diff #查看所有修改过的文件
	git diff a.c #指定查看修改过的文件
	
add:	#将修改代码放入git暂存区
	git add . 		#将所有修改添加到暂存区,当cd进某一目录时,执行此命令只会提交当前所在目录的所有改动。
	git add -u  	#(git add --update缩写)这个命令不会提交新文件(untracked file)-----仅仅作为修改提交被修改(modified)和被删除(delete)文件,不包括新文件(new)
	git add -A 		#等同于 git add . 会提交所有的文件包括修改新建和删除的
	git add C:\Users\LP\Desktop\CODE\SchedLineEventDate.cs  #添加指定文件到暂存区
	回退误添加文件:
		1)git reset HEAD app/src/main/java/com/company/xingnana/providertest/MainActivity.java #撤销添加
		2)git checkout app/src/main/java/com/company/xingnana/providertest/MainActivity.java #撤销修改
		3)git status #可以看到nothing to commit ,文件变成了未修改前的状态,表明修改撤销成功!
	提交某个文件夹下所有改变的方法:
		1. 切换到到该目录下;
		2.暂存到本地仓库 git add ./*;
		3. 提交到本地仓库 git commit -m 'xxx';
		4. 提交到远程仓库 git push 

commit:#将暂存区的文件推送到本地git库里
	参数:
		-m	#添加备注信息
	git commit [file1] [file2] ... -m [message] #将指定文件的修改推送
	git commit  -m [message]	#将全部暂存区的内容推送到本地git库里
	回退误提交:
		1)git log #查看历史提交记录,找到想要撤销的id 
		2)git reset id #回退到某个版本,只保留源码,回退commit和index信息。
		   git reset –hard id #将代码恢复到前commit_id 对应的版本 。该命令将彻底回退到某个版本,本地的源码也会变为上一个版本的内容,该命令慎用!
		
push:#推送本地修改到github远端
	git push	#Clone的一般直接用这个就行
	git push --set-upstream origin master #指定推送的源
	git push origin localbranchname:originbranchname	#将本地localbranchname分支连接至远端originbranchname,若远端无originbranchname则创建

pull:
	git pull #//抓取远程的新提交

删除:
	1)文件:#都需要add后的相关git文件
		git rm -f C:\Users\LP\Desktop\CODE\STLDemo  #删除git索引和本地文件
		git rm --cached C:\Users\LP\Desktop\CODE\STLDemo   #仅从git索引中删除文件。但本地文件还存在,且这个文件不被版本控制。
	2)删除文件夹:#都需要add后的相关git文件	
		git rm -rf C:\Users\LP\Desktop\CODE #删除git索引和本地文件夹  -rf 递归删除文件夹中文件
		git rm -rf --cached C:\Users\LP\Desktop\CODE  #仅从git索引中删除文件。但本地文件夹还存在,且这个文件不被版本控制。

Git放弃本地修改:
	1.本地文件已经修改,但是没有使用git add .命令
		git status								#查看修改
		放弃修改command:
			git restore 文件名					#放弃单个文件
			git restore 文件夹名					#放弃单个文件夹
			git restore	.						#放弃所有修改
	2.本地代码修改后,使用了git add .命令
		git status								#查看修改
		放弃修改command: 						#放弃后会回到第一步,修改的代码不会被删除
			git restore --staged 文件名			#放弃单个文件
			git restore --staged 文件夹名		#放弃单个文件夹
			git restore --staged	.			#放弃所有修改
	3.本地代码修改后,使用了git add .命令和git commit -m命令
		git status								#查看修改
		放弃修改command:						#此时仅保存了修改(恢复到了第一步)
			git reset HEAD^						#恢复上一次提交的
			git reset --hard 1094a 				#跳转到指定的版本(commit_id前几位就行,git log查看id)

git clean 和 git reset --hard
	git clean -n  	# 	是一次clean的演习, 告诉你哪些文件会被删除. 记住他不会真正的删除文件, 只是一个提醒
	git clean -f 	# 	删除当前目录下所有没有track过的文件. 他不会删除.gitignore文件里面指定的文件夹和文件, 不管这些文件有没有被track过
	git clean -f <path>		#	删除指定路径下的没有被track过的文件
	git clean -df	#	删除当前目录下没有被track过的文件和文件夹
	git clean -xf	#	删除当前目录下所有没有track过的文件. 不管他是否是.gitignore文件里面指定的文件夹和文件
	git clean  #对于刚编译过的项目也非常有用. 如, 他能轻易删除掉编译后生成的.o和.exe等文件. 这个在打包要发布一个release的时候非常有用
	下面的例子要删除所有工作目录下面的修改, 包括新添加的文件. 假设你已经提交了一些快照了, 而且做了一些新的开发
	git reset --hard
	git clean -df
	运行后, 工作目录和缓存区回到最近一次commit时候一摸一样的状态,git status会告诉你这是一个干净的工作目录, 又是一个新的开始了!
	




其他命令:

	git reset --hard 1094a #跳转到指定的版本(commit_id前几位就行,git log查看id)

	git log #查看提交日志
	//退出git log 英文状态下按Q
	
	git checkout main #切换main

	git merge mybranch #合并代码

	切换https://github.com/c_test.git为[email protected]:Panor520/LinuxCode.git命令:
		1)git remote -v #查看当前方式
		2)git remote rm origin #删除原来的源
		3)git remote add origin [email protected]:Panor520/LinuxCode.git #添加新源
		   或者 git remote add origin https://github.com/c_test.git


	git config --global core.quotepath false # git中文文件夹和文件名称无法显示,执行下面语句即可


合并其他分支代码到本分支

2. 将本地新建文件夹上传到新的仓库

上传代码之前,一定一定要先下拉代码 ,如果有冲突(你和别人同时修改了某一个文件的某一行代码),那么就要先解决冲突,才能提交!

git init                                #1.初始化文件夹,使文件夹出现.git文件
git remote add origin 远程仓库地址        #2.设置本地与远程仓库的链接
git pull origin master                  #3.将远程仓库进行下拉,获取同步
git add .                               #4.
git commit -m "本次上传的提示,随便你写什么都可以这个是给你自己看的" #5.提交代码
git push origin master:master           #6.将代码上传至远程仓库的master节点

N、GIT命令报错及解决办法:

N.1 Clone错误:

	
	--clone 我自己的github上的代码报错如下:
	PS C:\Users\LP\Desktop\GitHub Repository> git clone git@github.com:Panor520/Panor520.git
	Cloning into Panor520...
	The authenticity of host github.com (13.250.177.223) can‘t be established.
	RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
	Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
	Warning: Permanently added github.com,13.250.177.223 (RSA) to the list of known hosts.
	git@github.com: Permission denied (publickey).
	fatal: Could not read from remote repository.
	
	Please make sure you have the correct access rights
	and the repository exists.
	
	--解决办法
	git config --global user.name "Your Name" 
	git config --global user.email "[email protected]"
	
	--接着再次尝试clone,报错如下:
	PS C:\Users\LP\Desktop\GitHub Repository> git clone git@github.com:Panor520/Panor520.git
	Cloning into 'Panor520'...
	Warning: Permanently added the RSA host key for IP address '52.74.223.119' to the list of known hosts.
	git@github.com: Permission denied (publickey).
	fatal: Could not read from remote repository.
	
	Please make sure you have the correct access rights
	and the repository exists.
	
	--解决办法如下(回车后一直按Enter):
	--输入下面命令后回车,然后到.ssh文件夹下打开id_rsa.pub文件复制到github下新增一个ssh publickey
	ssh-keygen
	--再次尝试Clone,如果报错如下,就将报错的IP到host文件里,否则就直接好了
	Warning: Permanently added the RSA host key for IP address 13.229.188.59 to the list of known hosts.

N.2 git add -A 遇到的错误

错误信息如下:

	PS C:\Users\LP\Desktop\CODE\MyGitHub\MyCode> git add -A
	warning: LF will be replaced by CRLF in MyDemo/C#/.Net Core/WebApp_MVC/ContosoUniversity/appsettings.Development.json.
	The file will have its original line endings in your working directory
	warning: LF will be replaced by CRLF in MyDemo/C#/.Net Core/WebApp_MVC/ContosoUniversity/bin/Debug/net5.0/appsettings.Development.json.

原因:

因为Git的换行符检查功能。LF是linux下的换行符,而CRLF是enter + 换行。
	Git提供了一个换行符检查功能(core.safecrlf),可以在提交时检查文件是否混用了不同风格的换行符。这个功能的选项如下:
	false - 不做任何检查
	warn - 在提交时检查并警告
	true - 在提交时检查,如果发现混用则拒绝提交
	建议使用最严格的 true 选项,避免跨平台产生产生不必要的错误。
	假如你正在Windows上写程序,又或者你正在和其他人合作,他们在Windows上编程,而你却在其他系统上,在这些情况下,你可能会遇到行尾结束符问题。这是因为Windows使用回车和换行两个字符来结束一行,而Mac和Linux只使用换行一个字符。虽然这是小问题,但它会极大地扰乱跨平台协作。

- 修复方法1:

	//Git可以在你提交时自动地把行结束符CRLF转换成LF,而在签出代码时把LF转换成CRLF。用core.autocrlf来打开此项功能,如果是在Windows系统上,把它设置成true,这样当签出代码时,LF会被转换成CRLF
	git config --global core.autocrlf true

- 修复方法2:

	//Linux或Mac系统使用LF作为行结束符,因此你不想 Git 在签出文件时进行自动的转换;当一个以CRLF为行结束符的文件不小心被引入时你肯定想进行修正,把core.autocrlf设置成input来告诉 Git 在提交时把CRLF转换成LF,签出时不转换;
	git config --global core.autocrlf input
	//这样会在Windows系统上的签出文件中保留CRLF,会在Mac和Linux系统上,包括仓库中保留LF。

- 修复方法3:

	//如果你是Windows程序员,且正在开发仅运行在Windows上的项目,可以设置false取消此功能,把回车符记录在库中
	git config --global core.autocrlf false

N.3. git commit 遇到的错误

错误信息如下:
由报错信息可以看出是本地.git文件似乎损坏了

error: object file .git/objects/49/c79c83a8056d0007ba4e70bdd1d8eb9b42edb0 is empty
error: object file .git/objects/49/c79c83a8056d0007ba4e70bdd1d8eb9b42edb0 is empty
fatal: loose object 49c79c83a8056d0007ba4e70bdd1d8eb9b42edb0 (stored in .git/objects/49/c79c83a8056d0007ba4e70bdd1d8eb9b42edb0) is corrupt

解决办法如下:
按下面步骤操作即可。

rm -fr .git  
 
git init  
 
git remote add origin your-git-remote-url  
 
git fetch  
 
git reset --hard origin/master  
 
git branch --set-upstream-to=origin/master master

N.4 clone时错误

错误信息如下:

fatal: unable to access 'https://github.com/Panor520/CPP.git/': GnuTLS recv error (-110): The TLS connection was non-properly terminated.

Git--Command_第1张图片
解决办法:
将命令中的 https改为 git。
Git--Command_第2张图片

N.5. remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.

remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
`fatal: Authentication failed` for 'https://github.com/Panor520/CPP.git/'**

这个报错是因为最近github更新了使用token和ssh验证,老的不能用了。
Git--Command_第3张图片
Git--Command_第4张图片
最后generate后在git push

```bash
l@pl-virtual-machine:~/Desktop/CPP$ git push
Username for 'https://github.com': your_username
Password for 'https://[email protected]': your_token
```

N.6 配了代理无法push代码

解决办法:
一般直接用方法2解决

	>方法1:重置网络
	
	sudo service network-manager stop
	sudo rm /var/lib/NetworkManager/NetworkManager.state 
	sudo service network-manager start
	
	>方法2:取消git代理
	git config --global --unset http.proxy 
	git config --global --unset https.proxy 

N.7 git提交中文乱码

	执行以下四行命令即可解决
	
	$ git config --global core.quotepath false # 设置 git status utf-8编码
	
	$ git config --global gui.encoding utf-8 # 设置Git GUI界面utf-8编码
	
	$ git config --global i18n.commit.encoding utf-8 #设置commit信息utf-8编码
	
	$ git config --global i18n.logoutputencoding utf-8 # 设置输出 log utf-8 编码
	

N.8 [email protected]: Permission denied (publickey).fatal: Could not read from remote repository.

	cd ~/.ssh  			#1。
	
	cat id_rsa.pub 		#2.复制结果数据
	
	#3.将2复制的数据添加到下面的图示中点击提交后,再次尝试即可。

Git--Command_第5张图片

N.9 fatal: unable to access ‘https://myserver.com/gogs/user1/myapp/’: SSL certificate problem: unable to get local issuer certificate

参考链接

	错误:
		我们在使用git初始化一个项目时,尤其是通过git submodule update --init --remote初始化子模块时,可能会遇到下面这个错误:
		fatal: unable to access 'https://myserver.com/gogs/user1/myapp/': SSL certificate problem: unable to get local issuer certificate
	
	原因:
		这是由于当你通过HTTPS访问Git远程仓库的时候,
		如果服务器上的SSL证书未经过第三方机构认证,git就会报错。
		原因是因为未知的没有签署过的证书意味着可能存在很大的风险。
	
	解决办法:
		就是通过下面的命令将git中的sslverify关掉:
		git config --global http.sslverify false	#影响范围是系统当前用户
		git config --system http.sslverify false	#影响范围是系统全局所有用户
		git config http.sslverify false				#针对当前仓库进行设置
	
	如果你的仓库中存在嵌套的git子模块(就是子模块中又引用了子模块),
	在进行初始化时,仍然有可能遇到self signed certificate in certificate chain的错误,
	此时可以通过执行下面的命令来解决:
		npm config set strict-ssl false

N.10 Your local changes to the following files would be overwritten by merge:Please commit your changes or stash them before you merge.Aborting

	方法一:放弃本地修改
		此方法本地修改的代码会被丢弃,不可找回
		git reset --hard :撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交
		git pull
	
	方法二:
		git stash
		git pull
		git stash pop
		
		释义:
			git stash		#保存当前工作进度,能够将所有未提交的修改(工作区和暂存区)保存至堆栈中,用于后续恢复当前工作目录。也可以用git stash save,作用等同于git stash,区别是可以加一些注释
			git stash pop	#可以把你刚才stash到本地栈中的代码pop到本地(也可以用git stash apply,区别:使用apply恢复,stash列表中的信息是会继续保留的,而使用pop恢复,会将stash列表中的信息进行删除。)
			
			
			git stash list	#存储到本地栈顶以后,你可以使用git stash list 查看你本地存储的stash日志
			git stash clear	#清空Git栈,原来stash的节点都会被清除

你可能感兴趣的:(Git,git)