git实际操作遇到的坑

本文详细介绍了git的基本配置、克隆仓库、远程协作、版本控制操作,包括解决常见错误如未指定分支、合并冲突等,并提供了实用技巧如stash和git reset。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下载git后需要设置上传到仓库的用户名,邮箱

git config --global user.name 用户名
git config --global user.email 邮箱

克隆到本地 git clone 地址
地址有两种 可以直接http的网址(需要输入用户名,密码),可以ssh(需要配置,但配置之后可直接克隆)

远端仓库代码更新,拉取到本地
fetch+merge多人写作更安全
第一次拉取时要指定下仓库 git remote add 仓库名 仓库地址

先看下git关联的仓库 git remote -v
拉取(这个是拉取到本地后直接和你的代码合并了) git pull 仓库名 远程分支名字

或者
从远程仓库分支下载到本地对应的分支 git fetch 仓库名 分支名
比较本地和远程的区别 git log -p 本地仓库名.. 远程仓库名/远程分支名 如: git log -p master.. origin/master
远程下载的代码合并到本地 git merge origin/master

再或者
从远程获取最新版本到本地 git fetch origin master:temp
(从远程origin仓库master分支下载到本地并新建一个分支temp)
比较本地远程区别 git diff temp (比较master和temp俩分支区别)
合并分支 git merge temp
如果不想要temp分支了,可删除 git branch -d temp
如果该分支没有合并到主分支会报错,可强制删除 git branch -D 分支名

本地创建分支。并自动切换 git checkout 分支名
本地创建新分支并与指定的远程分支关联,并自动切换

git checkout -b 本地分支名 仓库名/远程分支名

推送到远程仓库一系列操作

//暂存到工作区
git add .
//提交
git commit -m '提交注释'
//暂存并提交
git commit -am '提交注释'
//推到远程仓库
git push 仓库名 分支名

错误
第一次搞拉取时出现了这个
在这里插入图片描述
原因:没有指定分支(因为这不是为当前分支配置的默认远程,所以必须在命令行上指定分支。)
解决:拉取时指定仓库名,分支名
在之后可以直接在vscode上点拉取,输入用户名,密码就行
应该也可以用ssh不用每次输密码,但使用ssh需要配置

错误

fatal: refusing to merge unrelated histories

可能在git pull或git push遇到。
原因:两个分支没有取得关系
解决:命令后加--allow-unrelated-histories
错误
在这里插入图片描述
git commit时遇到
原因:没有输入提交说明
解决:在页面输:wq
或者在页面输:q 然后运行git commit -m '提交说明'

错误
git merge conflict
原因:冲突
解决:合并冲突

比较文件之间的不同详细用法:
(1)git diff:当工作区有改动,临时区为空,diff的对比是“工作区与最后一次commit提交的仓库的共同文件”;当工作区有改动,临时区不为空,diff对比的是“工作区与暂存区的共同文件”。

(2)git diff --cachedgit diff --staged:显示暂存区(已add但未commit文件)和最后一次commit(HEAD)之间的所有不相同文件的增删改(git diff --cachedgit diff –staged相同作用)

(3)git diff HEAD:显示工作目录(已track但未add文件)和暂存区(已add但未commit文件)与最后一次commit之间的的所有不相同文件的增删改。

(3.1)git diff HEAD~Xgit diff HEAD^^^…(后面有X个^符号,X为正整数):可以查看最近一次提交的版本与往过去时间线前数X个的版本之间的所有同(3)中定义文件之间的增删改。

(4)git diff <分支名1> <分支名2> :比较两个分支上最后 commit 的内容的差别

(4.1) git diff branch1 branch2 --stat 显示出所有有差异的文件(不详细,没有对比内容)

(4.2) git diff branch1 branch2 显示出所有有差异的文件的详细差异(更详细)

(4.3) git diff branch1 branch2 具体文件路径 显示指定文件的详细差异(对比内容)

错误
warning: LF will be replaced by CRLF in
原因:Windows中换行符CRLF,Linux中换行符LF。跨平台协作的项目,保存文件用哪个标准。git提供 换行符自动转换 功能解决,默认开启。换行符自动转换:自动把代码里与当前操作系统不同的换行的方式,转换炒年糕当前系统的换行方式(LF与CRLF间的转换)
解决:关掉自动转换功能
git config core.autocrlf false (仅对当前git仓库有效)
git config --global core.autocrlf false (全局有效)我一般用的这个

错误

Authentication failed for

原因:1、密码问题。可能为 密码输入错误。也可能 git密码修改后没有配置修改新密码。等等
2、git账户问题。可能 git账户被锁定
解决:我的是密码失效了,然而我好像之前改过了?反正密码的问题。找公司管理员重置了下密码。
排查问题:先查询用户信息 git config --list
看看用户名,邮箱对不对
不对则重新配置

git config --global user.name 用户名
git config --global user.email 邮箱

如果是git密码修改后没有配置修改新密码,那么我们就重新输入一下用户名及修改后的新密码:

我们需要做如下操作(idea工具下操作)

1)在file->Settings->Passwords下在Do not save,forget passwords after restart前打勾。

2)在控制面板的凭据管理器中找到windows凭据,将git的密码修改成已经改过的新密码(操作完后保险起见可以重启一下机器)。

3)如果是账户问题引起的就找一下解锁账户的方法了(每个公司可能都不太一样,不知道的看下员工手册什么的)。

错误:
迁移到新仓库时remote后直接push遇到的问题
在这里插入图片描述
原因:远程仓库没有文件,空目录不能提交上去
解决:

错误:

fatal: remote origin already exists.

原因:远程来源已存在
解决:查看关联的orign远程仓库 git remote -v
删除关联的orign git remote rm origin
添加新的 git remote add origin git@github.com:(github名)/(git项目名).git

如果输入$ git remote rm origin 还是报错的话,error: Could not remove config section ‘remote.origin’. 我们需要修改gitconfig文件的内容

找到你的github的安装路径,我的是C:\Users\ASUS\AppData\Local\GitHub\PortableGit_ca477551eeb4aea0e4ae9fcd3358bd96720bb5c8\etc

找到一个名为gitconfig的文件,打开它把里面的[remote “origin”]那一行删掉

错误
运行 git add . 出现此操作
does not have a commit checked out,fatal: adding files failed
原因:咋文件夹下还存在.git的隐藏文件
解决:删除子目录.git即可

工作实际中一般先创建自己的开发分支推送到自己的远程分支,自己代码改崩不会影响到主分支
git checkout -b ‘自己分支名’

改完代码推送步骤
提交,推送到远端自己分支,拉取主分支,有冲突合并冲突,切换主分支,拉取,推送到主分支。最后切换到自己分支继续开发代码

git commit -am '备注'   
// 如果有新建文件需要  git add .
git push
git pull origin dev
git merge '自己分支名'
git checkout dev
git pull
git push

频繁切换分支时可以使用下面两个
在a分支修改内容但没有完全解决,此时有一个更加紧急的任务需要切换到b分支,此时可以用stash命令把修改的内容放入临时储存区,然后checkout切换到b分支修改,改完提交之后再切换到a分支,用stash pop命令恢复之前编辑的内容

git stash
git stash pop

错误

Ready to be merged automatically

没有合并权限,找管理员开一个权限。

撤回
1、提交错文件了撤回提交。只到commit没有进行到push
如果只有一次可以直接git reset HEAD^
HEAD^指上一个版本,也可写HEAD~1

几个参数注意:
--mixed:不删除工作空间改动代码,撤销add,commit。默认参数,git reset --mixed HEAD^git reset HEAD^效果一样。
--soft:不删除工作空间改的代码,撤销commit
--hard:删除工作空间改的代码,撤销add,commit
恢复到上一次commit状态
如果只是commit注释写错了,改注释可用git commit --amend

2、已经push了,要撤回
首先查看所有提交版本git log
回退到指定版本

git reset --hard 版本号   //删除工作空间改动的代码,撤销add,commit

reset将HEAD指针指到指定提交,历史记录中不会出现放弃的提交记录
重新推送代码git push

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值