CODE.CHINA地址:https://codechina.csdn.net/about#首先我们需要注册账号:这里我已经注册成功 首先创建一个学习小组:也就是组织 一些简单的步骤我就先不赘述了直接开正题吧: 显示在桌面右键点一下会有一个Git Bush Here 然后你去生成ssm密钥,这个C 后面的xxx…是一个名字,不重要,我这里使用了我自己的qq邮箱
ssh-keygen -t rsa -C "xxxxx@xxxxx.com"为了清晰易懂我借用一张图片说明: 然后便生成了密钥在我们的C盘里面,截图中有这个路径,我们对应找到以后 打开刚刚的codeChina网站,找到设置里面的SSH密钥经行补充完善
git remote add origin git@gitee.com:linxinfa/mytest.git如果在使用命令 git remote add时报错:
git remote add origin git@gitee.com:linxinfa/mytest.git fatal: remote origin already exists.说明本地库已经关联了一个名叫 origin的远程库,此时,可以先用git remote -v查看远程库信息:
git remote -v origin git@gitee.com:linxinfa/mytest.git (fetch) origin git@gitee.com:linxinfa/mytest.git (push)我们可以删除已有的远程库
git remote rm origin再关联远程库
git remote add origin git@gitee.com:linxinfa/mytest.git添加文件:将需要上传的文件复制粘贴到这里面,执行git命令 首先cd my_way进入这个文件夹里面 git add -A 添加所有文件夹 git commit - m “你的文件夹名”(可以不写):提交文件 git push -u origin master 倘若出现这个报错:
fatal: not a git repository (or any of the parent directories): .git那就是没有初始化,需要输入git init命令生成.git文件
git init #把当前目录变成git可以管理的仓库 git add readme.txt #添加一个文件,也可以添加文件夹 git add -A #添加全部文件 git rm test.txt #删除一个文件,也可以删除文件夹 git commit -a -m "some commit" #提交修改 git status #查看是否还有未提交 git log #查看最近日志 git reset --hard HEAD^ #版本回退一个版本 git reset --hard HEAD^^ #版本回退两个版本 git reset --hard HEAD~100 #版本回退多个版本 git remote add origin +地址 #远程仓库的提交(第一次链接) git push -u origin master #仓库关联 git push #远程仓库的提交(第二次及之后)分割线---------------------------------------------------------------------------------------------------- 分割线---------------------------------------------------------------------------------------------------- 分割线---------------------------------------------------------------------------------------------------- 接下来开始学习分支: 首先讲解一波分支的代码:
分支操作 命令 创建分支 git branch首先自己换了一个之前自己在git和学长创建了一个小组项目,就用这个试学一下,首先还是一样的步骤,先创建一个文件夹拉取, 然后我打算新建分支使用git branch <分支名>,但是却报错了: fatal: Not a valid object name: ‘master’. 这个报错的原因是我们需要先建立一个主分支,当前连主分支都没有创建叫name的分支,但仍然停留在当前分支。 删除分支 git branch -d :参数为-D则为强制删除。 git push origin --delete :删除远程仓库的叫name的分支,同名的本地分支并不会被删除,所以还需要单独删除本地同名分支 git branch -dr / :没有删除远程分支,只是删除 git branch -r 列表中的追踪分支。一般只有git push命令可以修改远程仓库。 切换分支 git switch git checkout 创建+切换分支 git switch -c git checkout -b 上方两条命令一个意思:如果分支存在则只切换分支。不存在则创建叫name的分支,然后切换到该分支。相当于两条命令:git branch ,git checkout 查看分支 git branch:查看本地分支,当前分支前面会标一个*号。 git branch -r:查看远程分支。 git branch -a:查看本地分支和远程分支,远程分支会用红色表示出来(如果你开了颜色支持的话)。 git branch -vv:查看本地分支对应的远程分支。 重命名分支 git branch -m oldName newName
报错原因就是当前没有 master 分支,无法新建分支。
可以使用以下命令查看当前分支:
git branch使用git branch这个命令后你会发现什么都没有输出,证明你还没有主分支 解决方案
新建 master 分支:
git 提交一次代码就会自动保存到 master 分支。
不同分支的 commit 是不会产生冲突的,因为 commit 提交到的是当前分支的 本地库。
只有将分不同分支的本地库进行合并才会产生冲突。所以:
合并本地库会产生冲突
拉远程分支的代码也会产生冲突
两个人写同一个文件就可以
先提交的不会有冲突,后拉取的会有冲突
同一个机器,不同分支,写同一个文件,也可以产生冲突
A 、B 两分支操作同一个文件的同一行代码。
A 分支 commit
B 分支 commit
B 合并 A,就会产生冲突
warning: LF will be replaced by CRLF in folder/file2.txt. The file will have its original line endings in your working directory解决方法:git config --global core.autocrlf false 原因就是:
原因是路径中存在 / 的符号转义问题,false就是不转换符号默认是true,相当于把路径的 / 符号进行转义,这样添加的时候就有问题
然后我们提交加推送:git commit -m "注释信息...." + git push origin master 然后我们切换到主分支去修改这个文件: 然后我们同样添加提交推送,这里插入一下知识小结: 1.git status 查看工作区代码相对于暂存区的差别 2.git add . 将当前目录下修改的所有代码从工作区添加到暂存区 . 代表当前目录 3.git commit -m ‘注释’ 将缓存区内容添加到本地仓库 4.git pull origin master先将远程仓库master中的信息同步到本地仓库master中 5.git push origin master 将本地版本库推送到远程服务器, 6.origin是远程主机,master表示是远程服务器上的master分支和本地分支重名的简写,分支名是可以修改的 操作完成后出现了冲突:MERGING 这就是因为我们操作了同一个文件,导致了冲突!此时我们切换分支就会报错: 解决方案:我们首先git status查看一下仓库状态: 我们看到了这个以后其实有两种解决办法,第一种也就是网上很多人说的:git reset --hard head 这个指令是回滚的意思,git默认当前版本是HARD,上一个版本就是HEAD^ 上上一个版本就是HEAD^^ 当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。 但是这个指令会导致你的代码丢失,所以并不是一个好的方法,那么第二个解决方法就是手动修改,你自己通过git status 去找到对应的冲突地方然后: 手动改成: 然后我们再次add 加 commit 加pull三步走: OK解决啦! 最后说一下自己的理解,一开始确实在制造冲突上面有一些绕,首先我们加入创建了两个分支,一个叫Dark一个叫Light,然后我们首先处于Dark分支,我们假设Dark分支与Light分支一开始都只有一个叫file.txt的文件,然后我们在Dark上面创建一堆其他的东西然后添加提交加推送后,我们切换到Light分支首先进行合并会发现没有任何报错,因为我们只增不减,没有涉及到双方都触碰的文件,我一开始理解git冲突就是不可以随意触碰别人的代码,要是你直接碰了别人的代码就会报错但是后来自己尝试了好几遍发现不是这样的!! 重点理解一下什么才是冲突:两个已经提交的分支的相同文件相同位置的的不同操作进行了合并!!!! 重要的话说三次: 两个已经提交的分支的相同文件相同位置的的不同操作进行了合并叫冲突 两个已经提交的分支的相同文件相同位置的的不同操作进行了合并叫冲突 两个已经提交的分支的相同文件相同位置的的不同操作进行了合并叫冲突 也就是说,要是我现在是Dark分支,我里面的file.txt里面写的一句话:我是Dark,主分支里面也有一个file.txt里面写的我是master,我们谁去推送了谁就是老大,也就是说要是dark提交了,然后此时master傻乎乎的merge了一下Dark,master在同样的文件中写的所有代码都会一下子被覆盖!!!!所以记住无论谁只要push了就是老大,但是一山难容二虎,要是两个分支都提交了再进行merge就会出现MERGING! 重新梳理一下,现在有Dark和Light两个分支,我们两个分支都有一个叫做test.txt文件。Dark分支里面的文件写的是:我叫Dark,Light分支里面的文件写的是:我叫Light,然后我们目前是Dark分支,我们修改了这个文件里面的内容为:我是新一代Dark!,然后我们add+commit+push到Dark分支,然后我们切换到Light分支,此时要是直接merge Dark就会发现你的文件内容从我叫Light变成了我是新一代Dark!,因为这个git是会区分主次的!你前面的修改了然后推送成功就会变成主!其他的人现在只要merge你的分支都会变成你的样子,然后我们怎样知道冲突呢?那就是,回到刚刚Dark分支已经add+commit+push这一步,然后我们还是切换到Light分支,此刻我们不要去马上merge合并,因为这样就会成功把现在为主的master代码覆盖过来,我们要先修改这个test.txt文件,修改完了以后我们也去在Lignt分支add+commit+push,然后一切完了以后我们再来merge Dark就会出现Dark|MERGING冲突报错!因为现在Light也去Push了也成了所谓的主,此时就有两个主了,就会报错了!然后你现在切换到Dark分支立马执行merge Light,你会发现同样是冲突错误!那么这个怎么解决呢?我前面说的使用git reset --hard head 知识回滚,并不是解决问题的真正方法,真正方法就是在两个王的基础上培养一个王中王!那就是在MERGING错误的时候你找到并打开错误文件,会有这样的样子:<<<<<<< HEAD和=======中间的是你自己的代码, ======= 和>>>>>>>中间的是其他人修改的代码你现在重新修改这个文件然后add+commit+push后,切换到light就可以直接merge Dark了! 未解决的小问题:
假如我当前本地是主分支,和另一个分支second一模一样,然后我在主分支新建了一个one.txt文件,我add➕commit后,我push origin second,而不是push origin master ,然后我checkout到second分支后我pull发现新文件并没有过来,只有merge master才可以过来,那么我就好奇我在push的时候push origin 后面加的这个远程仓库好像并没有什么区别,这是为什么呀



