下载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 --cached
或 git diff --staged
:显示暂存区(已add但未commit文件)和最后一次commit(HEAD)之间的所有不相同文件的增删改(git diff --cached
和git diff –staged
相同作用)
(3)git diff HEAD
:显示工作目录(已track但未add文件)和暂存区(已add但未commit文件)与最后一次commit之间的的所有不相同文件的增删改。
(3.1)git diff HEAD~X
或git 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