git推送分支学习

转自:https://www.liaoxuefeng.com/wiki/896043488029600/900375748016320

https://www.runoob.com/git/git-push.html

1.push命令

推送分支,就是把该分支上的所有本地提交(commit)推送到远程库。

推送时,要指定本地分支,Git就会把该分支推送到远程库对应的远程分支上:

git push <远程主机名> <本地分支名>:<远程分支名>
//如果本地分支名与远程分支名相同,则可以省略:
git push <远程主机名> <本地分支名>

例如:

git push origin master    //将本地的 master 分支推送到 origin 主机的 master 分支

不同名:

git push origin test:cz/test

将本地的test分支推送到远程作为cz/test分支。

可以通过git branch --set-upstream-to master origin/master 设置分支上游,进行本地与远程分支的关联,方便pull和push。

2.尝试

当push时,如果已经有了其他人先push了同样的文件,会有冲突,那么会有以下问题:

% git push origin master
To deMacBook-Pro-2.local:/Users/git/myproj/myproj.git
 ! [rejected]        master -> master (fetch first)
error: 无法推送一些引用到 'deMacBook-Pro-2.local:/Users/git/myproj/myproj.git'
提示:更新被拒绝,因为远程仓库包含您本地尚不存在的提交。这通常是因为另外
提示:一个仓库已向该引用进行了推送。再次推送前,您可能需要先整合远程变更
提示:(如 'git pull ...')。
提示:详见 'git push --help' 中的 'Note about fast-forwards' 小节。

那么需要首先pull一下, 

myproj % git pull  
提示:您有偏离的分支,需要指定如何调和它们。您可以在执行下一次
提示:pull 操作之前执行下面一条命令来抑制本消息:
提示:
提示:  git config pull.rebase false  # 合并
提示:  git config pull.rebase true   # 变基
提示:  git config pull.ff only       # 仅快进
提示:
提示:您可以将 "git config" 替换为 "git config --global" 以便为所有仓库设置
提示:缺省的配置项。您也可以在每次执行 pull 命令时添加 --rebase、--no-rebase,
提示:或者 --ff-only 参数覆盖缺省设置。
fatal: 需要指定如何调和偏离的分支。

但仍然有上述问题,https://juejin.cn/post/7116098741857157157

git pull 相当于 git fetch(拉取代码) + git merge/ git rebase (将提交应用到当前分支)。在拉取代码之后,执行git merge还是git rebase,要根据配置来定。

myproj % git config pull.rebase false

之后pull,

myproj % git pull
自动合并 a.txt
冲突(内容):合并冲突于 a.txt
自动合并失败,修正冲突然后提交修正的结果。
@192 myproj % cat a.txt 
testA
testB
<<<<<<< HEAD
0820 bg修改一下
=======
202208 在bg2的dev分支做修改:)

20220820 在bg2的master分支上修改
20220820 在bg2的feature1分支上修改:>
>>>>>>> 9dbc9cf6

<<<<<<< HEAD 和 ======= 之间的是本地的最新提交,======= 和9dbc9cf6是远程分支的提交。修改文件后,提交,

myproj % cat a.txt
testA
testB
0820 bg修改一下
202208 在bg2的dev分支做修改:)

20220820 在bg2的master分支上修改
20220820 在bg2的feature1分支上修改:>

20220823 在bg的master分支上合并冲突
myproj % git add a.txt 
myproj % git commit -m '处理a.txt冲突'
myproj % git push

3.rebase变基

https://juejin.cn/post/7116098741857157157

git rebase 可以把分支的提交放到另一个分支的最新提交的后面(最新)。

 C、D、E 依次对应本地dev分支上的提交“新增b.txt文件”、"新增b222"、"新增b333",F、G 依次对应远程dev分支上的提交"新增a444"、"新增a555"。

git rebase origin/dev将dev分支上的提交放到了origin/dev分支上的提交的后面,C‘、D‘、E’和C、D、E提交包含相同的修改内容,但是它们是不同的提交。

 在dev分支执行git merge origin/dev会将origin/dev分支的代码合并到dev分支。并且会产生一个合并提交H,合并之后,dev分支就会包含A、B、C、D、E、F、G、H的提交内容。

 https://www.jianshu.com/p/6960811ac89c

https://blog.csdn.net/nrsc272420199/article/details/85555911

git checkout master
git pull
git checkout local
git rebase -i HEAD~2  //合并提交 --- 2表示合并两个
git rebase master---->解决冲突--->git rebase --continue
git checkout master
git merge local
git push

rebase -i HEAD~2真能合并两个提交?表示怀疑,好象不行,还是不会用rebase。。还是尽量每次只有一个commit吧。。。

https://www.cnblogs.com/wangiqngpei557/p/6056624.html

https://juejin.cn/post/6844903895160881166

git pull rebase 基本上就是为了解决merge时多出一个无用的commit的问题,那样分支历史不好看。

多人基于同一个远程分支开发的时候,如果想要顺利 push 又不自动生成 merge commit,建议在每次提交都按照如下顺序操作:

# 把本地发生改动的文件贮藏一下
$ git stash

# 把远程最新的 commit 以变基的方式同步到本地
$ git pull --rebase

# 把本地的 commit 推送到远程
$ git push

# 把本地贮藏的文件弹出,继续修改
$ git stash pop

 

posted @ 2022-08-22 23:33  lypbendlf  阅读(8230)  评论(0编辑  收藏  举报