git 在使用拉取、推送(pull或push)时时候会出现这样的错误提示

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git 在使用拉取、推送(pull或push)时时候会出现这样的错误提示相关的知识,希望对你有一定的参考价值。

git.exe pull -v --progress "origin"

/libexec/git-core/git-sh-setup: line 83: /bin/sed: Bad file number
From https://git.oschina.net/lima/***
= [up to date] master -> origin/master
D:\Program Files (x86)\Git/libexec/git-core\git-pull: line 268: /bin/tr: Bad file number
Your configuration specifies to merge with the ref 'master'
from the remote, but no such ref was fetched.

git不能完全退出(退出码 1) (4898 ms @ 2014/11/4 14:30:55)

与最新提交的数据合并分支后,可以推送了,但还是不能拉取,这是怎么回事呀。
用的是Git-1.9.4-preview20140815.exe TortoiseGit-1.8.9.0-64bit
php c++ java .net等开发的兄弟们快来就我呀。
tortoiseGit 克隆 成功 拉取失败,也可以推送。
以前好好的!

d:\\Program Files (x86)\\Git/libexec/git-core\\git-pull:line 268:/bin/tr:Bad file number
Your configuration specifies to merge with the ref 'master' 是不是你的代码有未提交的更新呀?你修改文件后如果没有提交push,那么你在pull的时候就会报错的,会让你先提交或者merge合并文件

【拓展资料】

git pull origin 拉取代码到本地,解决拉取代码时发生的文件冲突:

1)拉取(下载)指定分支代码合并到当前分支:

相当于指定分支的代码与当前分支的代码合并到了一起。

命令:git pull origin分支名称

注意:

每次使用该命令前,需要保证本地工作区是没有任何修改代码的,也就是说需要将本地工作区编辑过的文件添加到暂存区(git add .),或提交到本地仓库中(git commit),才可以使用该命令拉取指定分支的代码合并到当前分支中。

每次在操作完git commit命令后,必须拉取一下master分支代码,保持本地正在开发功能逻辑的代码分支代码是最新的,避免后续在提交时冲突过多或覆盖掉其他人的代码的问题出现。

如果我们需要将master主干分支的代码拉取并与我们当前分支(xuzhangzheng2)的代码进行合并的话,可以使用该命令。效果如图:

执行命令后,可以看到提示Alreadyup-to-date,意思为:已经是最新的了,无需进行更新。

当我们拉取的主干分支master被修改后,再执行拉取命令,会看到如图所示效果:

粉色框框选部分为自动合并代码的文件

绿色框框选部分为本次更新(包含新增、删除、修改)的文件及具体信息,文件名后面的9 表示有9行有更新, +++++++++表示这些更新是新增(+)还是删除(-)。

红色框框选部分为本次更新影响的文件数,新增的行数(insertions),删除的行数(deletions)。

2)解决拉取代码时发生冲突的情况

当我们执行git pullorigin 分支名称 命令想要拉取某一个分支的最新代码到本地,并合并到当前分支时,遇到了如下图的提示:

从图中我们看到,出现了两行提示语:

CONFLICT(content):Merge conflict inxxxx/xxx/xxx/xxx.java

Automatic merge failed;fix conflicts andthen commit the result.

分别使用红色和绿色框选出来了。

红色框框选部分为出现冲突的文件,绿色框框选部分为提示语:自动合并失败,修改冲突然后提交修改后的结果。

第一句中提到了一个关键词CONFLICT(content),这个词的出现表明某一个具体文件在合并过程中发生了冲突。发生冲突的原因大致可以理解为你与你的同事两个人在同一个文件中都进行了编辑操作,当其中一个人拉取合并了另一个人的分支,或拉取合并了另一个人合并过的分支的话,就会出现合并冲突的问题。

冲突,简单的说,同一个文件2个人编辑,2个人如果编辑的行数没有重合的话(一个人写1-10行,另一个人写11-20行),合并时就没有冲突;若2个人编辑的行数有重合的话(一个人写1-10行,另一个人写5-15行),合并时就会出现冲突,同时,会将2个人编写的内容都罗列出来,让出现冲突的那个人进行解决,最终将冲突解决完毕后,再进行提交合并等操作。

此时我们查看出现冲突的文件:

按照冲突提示的路径找到冲突对应文件(我使用的IDEA,由于有语法检查,所以一打开就看到错误文件在哪了),打开文件后,会看到如图红框框选部分,被蓝色线分割为了2部分,同时可以看到3个蓝色框框选的文本信息,如下三句:

中间的======是用于分割本地变更和远程仓库中的变更的,也就是说出现冲突时,如图,使用======把冲突的部分分割成2块。

上面的是本地修改变更的内容,以<<<<<<<HEAD开头。

下面的是远程仓库修改变更的内容,以>>>>>>>版本号 结尾。

版本号,也就是示例中的a5d8ca0b4fd8847b2c21d96900ac1edcf859ca1b,即为提交的版本号,使用该版本号可以在gitlab中找到提交记录,从而方便查询其他同事在对同文件进行修改时,都修改了哪些内容,便于进解决冲突。

解决方法:

根据实际业务场景,将本地修改变更的部分和远程仓库中修改变更的部分进行合并,留下满足业务逻辑的代码即可(若团队开发期间,出现冲突时,建议找到相关同事进行沟通,确保自己解决冲突的方法不会影响到其他人编写的功能),同时将上面提到的冲突标识删除掉,不然无法通过语法检查和编译。

同时建议使用全文件内容搜索<<<<<<<或======或>>>>>>>,将所有有冲突的地方一一进行解决,保重提交的代码是可运行,没有问题的。

解决冲突后,若需要提交代码的话,需先将代码使用git add .存入缓存区,或直接使用git commit –am “本次提交描述” 或git commit –a –m “本次提交描述”将代码提交至本地仓库区,同时再次拉取制定分支的最新代码,确保本次的代码时刻都是最新的,再进行接下来的推送代码至远程仓库操作。

参考技术A 注意到你这一行日志:
libexec/git-core/git-sh-setup: line 83: /bin/sed: Bad file number

我看是缺少sed可执行程序,或者sed不在这个路径下。
sed是个行编辑器,可以用来批量替换啥的。
如果真是这个导致的,安一个sed就行了。
此外还有一个:/bin/tr

您是在windows下通过什么环境使用git的? windows往往都没有sed tr这些工具。追问

兄弟用的这个东西TortoiseGit 来操作。

Git-1.9.4-preview20140815.exe TortoiseGit-1.8.9.0-64bit。
以前好好的,今天突然成这样了
sed tr 是不是我安装这样的软件就可以了?

追答

那不应该的,这俩软件不需要额外安东西的。
尝试重安一下git preview那个,我记得它安了个linux模拟器,带一些命令行工具。

追问

git preview 刚刚也重装了,还安装一个新版本。还是那样。真晕了!

本回答被提问者和网友采纳

git逻辑和基本命令

提交和推送的区别

提交(commit):把您做的修改,保存到本地仓库中
推送(push):把您本地仓库的代码推送至服务器(一般是远程服务器及gitlab或github)

拉取和获取的区别

git  pull     从远程拉取最新版本 到本地  自动合并 merge   
        不带分支地址默认拉取所在分支的代码,正常:git pull origin master
git  fetch   从远程获取最新版本 到本地   不会自动合并 merge 正常操作如下: 
        git fetch  origin master      
        git log  -p master ../origin/master    
        git merge orgin/master

分支和合并

git branch  XXX   创建分支(代码会从master复制过来)   
git checkout XXX 切换分支(代码也会切换成XXX的代码。
           如果xxx分支代码有后续提交过和mster不一样,这时就全不一样了,
           不会合并哦,别搞错,跟master代码没关系)
git merge XXX 合并XXX分支(假如你现在master,这时master就合并了XXX分支
的代码,XXX分支代码还是原来的代码)

合并代码有两种方案:

1.主分支合并xxx分支
 git fetch origin xxx
git log -p master..origin/xxx
git merge origin/xxx
首先你必须在master分支上,如果你在ccc分支上,那就是ccc分支合并xxx分支的代码【gitlab上合并到主分支可以申请】,merge是合并了代码和提交路径等等
2.拉取的方法
git pull xxx 拉取xxx的代码过来,并合并
区别:git pull = git fetch + git merge


拉取线上代码,覆盖本地已改的代码或恢复误删文件,及恢复线上版本

git fetch  或者 git fetch --all
git reset --hard XXX

版本回退

1.假设有2个提交记录

commit def5adef853da4cc05752bdb36577c127be71ba5

Author: 132982jianan <[email protected]>
Date:   Thu Dec 28 16:01:36 2017 +0800

 

    add data to 1.txt

commit f36801544670e00b2f59a28e19017d2786c4085e
Author: 132982jianan <[email protected]>
Date:   Thu Dec 28 15:59:46 2017 +0800

 

    init 1.txt
(END)

2.现在回到最开始的那一个提交
git reset --hard f36801544670e00b2f59a28e19017d2786c4085e

3.查看日志,就会发现只剩下一个提交了
git log

commit f36801544670e00b2f59a28e19017d2786c4085e
Author: 132982jianan <[email protected]>
Date:   Thu Dec 28 15:59:46 2017 +0800

    init 1.txt
(END)


4.这个时候,发现回退版本错了,那么就用git reflog查看提交记录
git reflog

f368015 [email protected]{0}: reset: moving to f36801544670e00b2f59a28e19017d2786c4085e
def5ade [email protected]{1}: reset: moving to def5ade
f368015 [email protected]{2}: reset: moving to f36801544670e00b2f59a28e19017d2786c4085e
def5ade [email protected]{3}: commit: add data to 1.txt
f368015 [email protected]{4}: commit (initial): init 1.txt


5.找出想要回退的版本,进行回退

恢复
git reset --hard def5ade














































以上是关于git 在使用拉取、推送(pull或push)时时候会出现这样的错误提示的主要内容,如果未能解决你的问题,请参考以下文章

多人协作时,从gitee拉取pull项目与推送push项目

多人协作时,从gitee拉取pull项目与推送push项目

git追踪分支

git逻辑和基本命令

Git pull(拉取),push(上传)命令整理(详细)

Eclipse And Spring Tool Site git操作 拉取代码和推送代码