1.git如何同步本地分支与远程origin的分支
问题场景1:
同事A创建了本地分支branchA并push到了远程->同事B在本地拉取(git fetch)了和远程branchA同步的本地分支branchA->同事A开发完成将远程分支branchA删除(远程仓库已经不存在分支branchA)->同事B用git fetch同步远端分支,git branch -r发现本地仍然记录有branchA的远程分支
分析:远端有新增分支,git fetch可以同步到新的分支到本地,但是远端有删除分支,直接"git fetch"是不能将远程已经不存在的branch等在本地删除的
解决方法:
git fetch --prune #这样就可以实现在本地删除远程已经不存在的分支
或者简略:
git fetch -p
git fetch -p origin
git remote prune origin
branch常用的命令:
git branch -a #查看本地和远程所有的分支
git branch -r #查看所有远程分支
git branch #查看所有本地分支
git branch -d -r origin/branchA #删除远程分支
其他较常用的命令
git fetch #将本地分支与远程保持同步
git checkout -b 本地分支名x origin/远程分支名x #拉取远程分支并同时创建对应的本地分支
问题场景2:
本地分支提示:Git Your branch is ahead of ‘origin/master’ by X commits,你想让本地直接和远程保持同步,想让不再提示这个讨厌信息,那么如果你本地的commit确保不想要,可以如下操作:
解决方法:
1)git reset --hard origin/master
或者还有一个将本地代码与服务器代码更新一致的语句
2)git branch -u origin/master
如果想直接回退版本让远程和本地代码保持一致,那就确保本地代码没问题之后强制推到远程
git push -f origin master
2.git 如何同步本地tag与远程tag
问题场景:
同事A在本地创建tagA并push同步到了远程->同事B在本地拉取了远程tagA(git fetch)->同事A工作需要将远程标签tagA删除->同事B用git fetch同步远端信息,git tag后发现本地仍然记录有tagA
分析:对于远程repository中已经删除了的tag,即使使用git fetch --prune,甚至"git fetch --tags"确保下载所有tags,也不会让其在本地也将其删除的。而且,似乎git目前也没有提供一个直接的命令和参数选项可以删除本地的在远程已经不存在的tag(我目前是没找到有关这类tag问题的git命令~~,有知道的同学可以告知我下,互相进步)。
解决方法:
git tag -l | xargs git tag -d #删除所有本地分支
git fetch origin --prune #从远程拉取所有信息
#查询远程tags的命令如下:
git ls-remote --tags origin
tag常用git命令:
git tag #列出所有tag
git tag -l v1.* #列出符合条件的tag(筛选作用)
git tag #创建轻量tag(无-m标注信息)
git tag -a -m ‘first version’ #创建含标注tag
git tag -a f1bb97a(commit id) #为之前提交打tag
git push origin --tags #推送所有本地tag到远程(场景:有两仓库。A,B. 先同步了。后来A更新了很多tag,这时B就落后了。把A pull出来,远程指向B,做pull和push。发现提交都同步到了B.但是Tag没有同步。)
git push origin #推送指定本地tag到远程
git tag -d #删除本地指定tag
git push origin :refs/tags/ #删除远程指定tag
git fetch origin #拉取远程指定tag
git show #显示指定tag详细信息
1.建立本地仓库
查看当前项目根目录中有没有 .git文件(隐藏文件),如果没有,右键->Git bash here ,然后输入命令git init建立本地仓库
git init
2.将代码提交到本地仓库
git add .
git commit -m "new branch commit"
3.在本地仓库中建立一个与远程仓库的别名,以便之后提交代码而不是每次都要输入远程仓库地址。指令结尾是git的仓库地址。
git remote add origin https://github.com/lioms/lioms.git
4.此时我要把本地的代码提交的远程仓库上,步骤如下
1)首先要建立本地的分支,并切换到该分支上(本地建立完分支,默认是在master分支上)
git branch hello_git_branch
git checkout hello_git_branch
2)push到远程仓库上面
git push origin hello_git_branch
由于刚才我们为远程仓库起了一个别名,那么这里就可以使用别名origin调用。
这里的含义是将hello_git_branch这个分支提交到远程仓库上面。如果远程仓库没有这个分支,那么也会新建一个该分支。
当然,也可以指定提交到远程仓库的某个分支上。
如下,是将hello_git_branch分支提交到远程仓库的master上面
git push origin hello_git_branch:master
拓展:
如果本地当前是在hello_git_branch分支上面,此时想把远程仓库的master与我的hello_git_branch分支合并(merge),可以使用如下命令:
git pull origin hello_git_branch:master
如果您使用如下指令,含义就是将远程仓库的master分支合并下来。如果本地没有master分支,那么本地就新建一个master分支;如果有这个分支就是 fetch + merge 操作。
git pull master