查看本地仓库分支
[root@node1 gitspace]# git branch
* master
创建本次分支
[root@node1 gitspace]# git branch dev #分支名称dev
[root@node1 gitspace]# git branch
dev #开发分支
* master #主分支
切换到dev分支
[root@node1 gitspace]# git checkout dev
Switched to branch 'dev'
查看当前dev分支状态
[root@node1 gitspace]# git status ./
On branch dev
nothing to commit, working tree clean
将本地分支推送到远程
[root@node1 gitspace]# git push origin dev
查看远程分支情况
[root@node1 gitspace]# git branch -r
origin/dev
origin/master
登录github查看到dev分支
现在,我们对本地test.md文件做了修改
查看当前状态
#对test.md进行修改
[root@node1 gitspace]# vim test.md
You have new mail in /var/spool/mail/root
#当前状态
[root@node1 gitspace]# git status ./
On branch dev
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: test.md
no changes added to commit (use "git add" and/or "git commit -a")
[root@node1 gitspace]# git add test.md
[root@node1 gitspace]# git commit -m '修改test.md提交啦'
[dev db34458] 修改test.md提交啦
1 file changed, 1 insertion(+)
提交到远程dev分支
[root@node1 gitspace]# git push -u origin/dev dev
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 304 bytes | 304.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To github.com:/Up-And-Coming-Lab/gitspace.git
1b77001..db34458 dev -> dev
Branch 'dev' set up to track remote branch 'dev' from 'origin/dev'.
error: update_ref failed for ref 'refs/remotes/origin/dev/dev': cannot lock ref 'refs/remotes/origin/dev/dev': 'refs/remotes/origin/dev' exists; cannot create 'refs/remotes/origin/dev/dev'
再次在github远程分支查看
已成功,提交到远程分支。
删除远程分支
git push origin –delete 分支名
[root@node1 gitspace]# git branch -r
dev/dev #多余分支
origin/dev
origin/master
#删除
[root@node1 gitspace]# git push dev --delete dev
To github.com:/Up-And-Coming-Lab/gitspace.git
- [deleted] dev
#删除成功
[root@node1 gitspace]# git branch -r
origin/dev
origin/master
[root@node1 gitspace]#
合并(merge)dev分支到master分支
[root@node1 gitspace]# git branch -a
* dev
master
remotes/origin/dev
remotes/origin/master
切换到master分支
[root@node1 gitspace]# git checkout master
Switched to branch 'master'
#你的当前分支是最新的数据
Your branch is up to date with 'origin/master'.
You have new mail in /var/spool/mail/root
git merge branch 合并指定分支branch到当前分支master
当前master分支下两个文件
[root@node1 gitspace]# git merge dev
Updating d5404a6..3e19ec7
Fast-forward
test.md | 2 ++
1 file changed, 2 insertions(+)
create mode 100644 test.md
提交本地master分支内容到origin下的master分支
[root@node1 gitspace]# git push -u origin master:master
Enumerating objects: 10, done.
Counting objects: 100% (10/10), done.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (9/9), 823 bytes | 411.00 KiB/s, done.
Total 9 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (2/2), done.
To github.com:/Up-And-Coming-Lab/gitspace.git
d5404a6..3e19ec7 master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
前面删除了一个dev/dev的分支,导致出现新问题
[root@node1 gitspace]# git checkout dev
Switched to branch 'dev'
#你分支的基础分支是‘dev/dev’,但是这个upstream已不再了
Your branch is based on 'dev/dev', but the upstream is gone.
#使用"git branch --unset-upstream"来修正
(use "git branch --unset-upstream" to fixup)
[root@node1 gitspace]# git branch --unset-upstream
正好,借此机会来说明一下什么是" --unset-upstream"和"–set-upstream"
其实就是建立本地分支与远程分支的映射关系(或者为跟踪关系track)
使用 -vv参数查看本地分支与远程分支的映射关系
[root@node1 gitspace]# git branch -vv
#可以发现我们当前dev分支没有远程映射关系
* dev 3e19ec7 desc test.md
#master映射关系为远程的[origin/master]
master 3e19ec7 [origin/master] desc test.md
[root@node1 gitspace]#
那建立映射关系有什么好处呢?
其实,有了映射关系后,这样使用git pull或者git push时就不必每次都要指定从远程的哪个分支拉取合并和推送到远程的哪个分支了
我们举例说明
1.当前本地dev分支,没有远程映射关系,我们test.md文件进行修改后push操作,进行如下操作:
#修改test.md文件
[root@node1 gitspace]# vim test.md
You have new mail in /var/spool/mail/root
#提交到本地仓库
[root@node1 gitspace]# git add test.md
[root@node1 gitspace]# git commmit -m '修改了test.md文件'
git: 'commmit' is not a git command. See 'git --help'.
The most similar command is
commit
将当前dev分支内容,提交到远程origin/dev 分支,提示信息如下
[root@node1 gitspace]# git push -u origin dev dev
ssh: Could not resolve hostname github.com: Name or service not known
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
切换到master本地分支,提交到origin/master分支操作如下:
使用push命令,将代码提交到远程对应分支
git push <远程主机名> <本地分支名>:<远程分支名>
[root@node1 gitspace]# git push origin master:master
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 398 bytes | 398.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To github.com:/Up-And-Coming-Lab/gitspace.git
3e19ec7..99eac24 master -> master
You have new mail in /var/spool/mail/root
现在我们为dev本地分支建立远程映射关系
#切换到dev分支
[root@node1 gitspace]# git checkout dev
Already on 'dev'
You have new mail in /var/spool/mail/root
#查看当前状态
[root@node1 gitspace]# git status ./
On branch dev
nothing to commit, working tree clean
#查看当前映射关系
[root@node1 gitspace]# git branch -vv
* dev 3e19ec7 desc test.md
master 99eac24 [origin/master] master 对test.md的修改进行提交
#建立映射关系
git branch --set-upstream-to origin/dev
或
git branch -u origin/dev
#执行映射操作
[root@node1 gitspace]# git branch --set-upstream-to origin/dev
#'dev'分支与远程origin仓库的'dev'分支建立了track追踪
Branch 'dev' set up to track remote branch 'dev' from 'origin'.
到此,在执行看一下映射关系
[root@node1 gitspace]# git branch -vv
* dev 3e19ec7 [origin/dev: ahead 2] desc test.md
master 99eac24 [origin/master] master 对test.md的修改进行提交
已经建立关系了。
我们在push到远程dev分支(就是从远程dev分支拉取内容到本地的dev分支)
[root@node1 gitspace]# git push origin dev:dev
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote:
remote: Create a pull request for 'dev' on GitHub by visiting:
remote: https://github.com/Up-And-Coming-Lab/gitspace/pull/new/dev
remote:
To github.com:/Up-And-Coming-Lab/gitspace.git
* [new branch] dev -> dev
[root@node1 gitspace]# git branch -vv
* dev 3e19ec7 [origin/dev] desc test.md
master 99eac24 [origin/master] master 对test.md的修改进行提交
#切换到本地dev分支
[root@node1 gitspace]# git checkout dev
Switched to branch 'dev'
Your branch is up to date with 'origin/dev'.
#将master分支内容merge到当前dev分支中
[root@node1 gitspace]# git merge master
Updating 3e19ec7..99eac24
Fast-forward
test.md | 2 ++
1 file changed, 2 insertions(+)
#推送本地dev分支内容到远程dev分支
[root@node1 gitspace]# git push origin dev:dev
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:/Up-And-Coming-Lab/gitspace.git
3e19ec7..99eac24 dev -> dev
[root@node1 gitspace]#
好东西要保留:
https://www.cnblogs.com/ydxblog/p/7988317.html