Clone后提交教程如下:
--设置代理:
//设置全局代理
//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中文文件夹和文件名称无法显示,执行下面语句即可
合并其他分支代码到本分支
上传代码之前,一定一定要先下拉代码 ,如果有冲突(你和别人同时修改了某一个文件的某一行代码),那么就要先解决冲突,才能提交!
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节点
--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.
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
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
错误信息如下:
fatal: unable to access 'https://github.com/Panor520/CPP.git/': GnuTLS recv error (-110): The TLS connection was non-properly terminated.
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验证,老的不能用了。
最后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
```
解决办法:
一般直接用方法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
中文乱码
执行以下四行命令即可解决
$ 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 编码
Permission denied (publickey).fatal: Could not read from remote repository.
cd ~/.ssh #1。
cat id_rsa.pub #2.复制结果数据
#3.将2复制的数据添加到下面的图示中点击提交后,再次尝试即可。
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
方法一:放弃本地修改
此方法本地修改的代码会被丢弃,不可找回
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的节点都会被清除