git远程操作
Last updated
Last updated
git的5个主要命令:
git clone
git remote
git fetch
git pull
git push
操作示意图
从远程主机clone出一个版本库
例如 git clone https://github.com/jquery/jquery.git
在从jQuery克隆出和远程主机版本库同名的目录,也可以指定本地目录
git remote
命令管理主机名,不带主机名列出所有远程主机,带-v
选项,可以查看远程主机的网址
克隆版本库的时候,所使用的远程主机自动被Git命名为origin
。如果想用其他的主机名,需要用git clone
命令的-o
选项指定。
git remote show
命令加上主机名,可以查看该主机的详细信息。
git remote add
命令用于添加远程主机。
git remote rm
命令用于删除远程主机。
git remote rename
命令用于远程主机的改名。
一旦远程主机的版本库有了更新(Git术语叫做commit),需要将这些更新取回本地,这时就要用到git fetch
命令。
上面命令将某个远程主机的更新,全部取回本地。
比如,取回origin主机的master分支。
git branch命令的-r
选项,可以用来查看远程分支,-a
选项查看所有分支
例如,我检查远程主机
显示
显示所有分支
显示所有仓库分支
如果要同时查看远程分支的说明使用-va
参数
如果只想看一下远程上游分支概述
,则可以直接check out
显示输出处于detachd HEAD
状态,可以查看远程分支都概述
此时使用 git branch -va
现在我将这个master_7u
取回并在这个分支开始工作,则增加 -b
参数
实际操作如下
如果要跟踪多个远程仓库,可以使用 git remote
命令
则查看分支可以看到类似
git pull
命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。
比如,取回origin
主机的next
分支,与本地的master
分支合并,需要写成下面这样。
如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
在某些场合,Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在git clone
的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master
分支自动"追踪"origin/master
分支。
如果当前分支与远程分支存在追踪关系,git pull
就可以省略远程分支名。
git push
命令用于将本地分支的更新,推送到远程主机。它的格式与git pull
命令相仿。
如果省略远程分支名,则表示将本地分支推送与之存在"追踪关系"的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。
上面命令表示,将本地的master
分支推送到origin
主机的master
分支。如果后者不存在,则会被新建。如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。
果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。
上面命令表示,将当前分支推送到origin
主机的对应分支。
如果当前分支只有一个追踪分支,那么主机名都可以省略。
根据远程分支创建本地分支(相当于从远程下载这个分支然后切换到这个分支上)
删除本地分支
如果已经下载过远程分支,则可以直接切换
注意:本地分支名字必须和远程分支名字相同,例如,这里分支名字是feature_autofix
。
如果没有提交到远程库,放弃修改:
先查看有哪些commit
例如:
d5c92f618314fb2f8759cfc77e167de3986c3548
是commit但是尚未push,准备回滚到上一个版本559770899a4e5bd8314a0ea196f433f3103dadbf
回滚
提示:
然后再检查
参考 git 远程分支回滚
和前文所述的放弃本地commit步骤所差异的是增加了删除远程分支和用回滚后的本地分支重建远程分支:
先查看有哪些commit
建议先备份一次本地分支
回滚本地分支
如果要回最近的3次提交,则使用命令
git reset --hard HEAD~3
删除远程分支
注意,这里分支名字前面有一个:
如果是master分支,使用命令是
但是,远程仓库的master如果是保护分支将报错,请去掉对分支的保护设置:
重新创建远程master分支(这跟第1次提交本地代码库给远程仓库的命令一样)
本地代码回滚到上一版本(或者指定版本)
加入-f
参数,强制提交,远程端将强制跟新到reset版本
在处理远程分支时,有时候需要删除不需要的远程分支。
检查远程分支
删除远程分支
删除tag
删除不存在对应远程分支的本地分支
将hotfix分支合并到当前分支中
删除分支hotfix,-d
选项只能删除被当前分支所合并过的分支,要强制删除没有被合并过的分支,使用参数-D
-M
用来强制重命名,如newbranch已经存在的时候。
查看当前分支和branchName分支中间的差异。也可以使用git diff branch1 branch2
来查看两个分支间的差异。
如果要比较文件,则使用
如果在不同的分支中都修改了同一个的同一部分,git就无法干净地把两者合并到一起。
任何包含未解决冲突的文件都会以未合并(unmerged)的状态列出。git会在有冲突的文件中加入标准的冲突解决标记,可以通过它们来手工定位并解决这些冲突。
在解决了所有文件里的所有冲突后,运行git add
把它们标记为已解决状态(也就是快照保存到暂存区域)。因为一旦暂存,就表示冲突已经解决。
先使用 git log
检查修改历史,可以看到修改的历史
然后根据commit的标识串就可以查看具体的修改,例如这里Change 2#
的修改: