繁体   English   中英

源/主提交泄漏到另一个远程分支从/主的历史中

[英]origin/master commits are leaks into the history of another remote branch slave/master

我写了一个简单的bash脚本,它初始化2个裸仓库( kingslave )。 您可以将该脚本复制到终端,然后执行以重现问题。

king仓库中,我已将远程分支添加到slave仓库中。

问题是当我尝试使用cmd git push slave master将新提交推送到slave repo中时,发生了一些奇怪的推送失败...就像我没有从远程获取新更改一样,此更改阻止了我尝试推送新提交...但这不是...

ygyerts @ ygyerts-Aspire-V3-771:〜/ repos / wd / king $ git push slave master

到/home/ygyerts/repos/bare/slave.git! [拒绝] master-> master(非快进)错误:无法将某些引用推送到'/home/ygyerts/repos/bare/slave.git'提示:由于推送的分支提示位于其远程后面,因此更新被拒绝提示:对应。 在再次推送之前,请检查该分支并集成远程更改提示:(例如'git pull ...')。 提示:有关详细信息,请参见“ git push --help”中的“关于快进的注意事项”。

我可以仅使用-f标志来推送新更改,该标志将从king/origin/master将此"init commit in king"添加到slave/master历史记录中。 这是绝对不能接受的!

tput reset

#======================================
# Clean workspace
#======================================
rm -rf ~/repos/bare
rm -rf ~/repos/wd

#======================================
# Create required folders
#======================================
mkdir -p ~/repos/bare
mkdir -p ~/repos/wd

#======================================
# Create Bare Repo KING
#======================================
cd ~/repos/bare
git init --bare king.git

#======================================
# Create Bare Repo SLAVE
#======================================
cd ~/repos/bare
git init --bare slave.git

#======================================
# Clone and Initialize KING repository
#======================================
cd ~/repos/wd
git clone ~/repos/bare/king.git
cd ./king
echo "KING" > king.txt
git add . && git commit -m "init commit in king"
git push origin master

#======================================
# Clone and Initialize SLAVE repository
#======================================
cd ~/repos/wd
git clone ~/repos/bare/slave.git
cd ./slave
echo "SLAVE" > slave.txt
git add . && git commit -m "init commit in slave"
git push origin master

#======================================
# Add remotes to KING repo
#======================================
cd ~/repos/wd/king
git remote add slave ~/repos/bare/slave.git
git fetch slave
git branch -a
  • 遥控器/原点/主机

    遥控器/从机/主机

#======================================
# Set upstream branches to within KING repo
#======================================
cd ~/repos/wd/king

git checkout slave/master
git checkout -b slave_master
git branch --set-upstream-to=slave/master slave_master

#======================================
# Add changes to slave/master through the king repo
#======================================
cd ~/repos/wd/king
git branch -vv

master fbdc59a [origin / master] init commit in king

  • slave_master 6370a7d [slave / master] init提交
git checkout slave_master
echo "king > slave/master" > king_to_slave.txt
git add . && git commit -m "add changes from king repo"
git push slave master

到/home/ygyerts/repos/bare/slave.git! [拒绝] master-> master(非快进)错误:无法将某些引用推送到 '/home/ygyerts/repos/bare/slave.git'提示:由于推送的分支提示位于其远程后面,因此更新被拒绝提示:对应。 在再次按下之前,请检查该分支并集成远程更改提示:(例如'git pull ...' )。 提示:有关详细信息,请参见“ git push --help”中的“关于快进的注意事项”。

git pull没有帮助!

我刚发现脚本中存在错误。 但是我不明白这个问题。

错误是在推cmd git push slave master

正确的cmd是git push slave slave_master:master

但是我仍然不明白为什么git push -f slave master cmd从origin master获取所有提交,然后尝试将它们放入slave master历史记录中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM