Open Qingquan-Li opened 6 years ago
参考:
Git 远程操作常用命令:
箭头二: git checkout --orphan gh-pages 表示创建一个新的(孤立)分支 gh-pages (本地新建 Git 仓库,默认分支为 master ),并 checkout 切换到 gh-pages 分支中。
git checkout --orphan gh-pages
Git 1.7.2 开始支持 git checkout --orphan <新的本地分支> 。
git checkout --orphan <新的本地分支>
应用场景:
在一个项目的任何时候,您都可以从一个干净的分支开始。一般用于本地新建仓库并新建分支时(不是 git clone )或开始一个新的分支时时(见下文)。 注意:Orphan branches can't be (reasonably) merged 。
git clone
假如你的某个分支上,积累了无数次的提交,你也懒得去打理,打印出的 log 也让你无力吐槽,那么这个命令将是你的神器,它会基于当前所在分支新建一个赤裸裸的分支,没有任何的提交历史,但是当前分支的内容一一俱全。新建的分支,严格意义上说,还不是一个分支,因为 HEAD 指向的引用中没有 commit 值,只有在进行一次提交后,它才算得上真正的分支。
语法:
git checkout -b <本地分支名> <远程主机名>/<远程分支名>
git branch [branchname]
git checkout -b [branch]
git clone 克隆远程仓库时,本地通常会自动地创建一个追踪 origin/master 的 master 分支。 当然也可以手动设置( 使用 git checkout 切换分支)其他分支(追踪远程主机的其他分支)。
git checkout
实例一:
建立跟踪分支最常用的方式: git checkout --track <远程主机名>/<远程分支名> ,等同于 git checkout -b <本地分支名> --track <远程主机名>/<远程分支名> :
git checkout --track <远程主机名>/<远程分支名>
git checkout -b <本地分支名> --track <远程主机名>/<远程分支名>
# 创建一个与远程分支具有相同名称的新本地分支,并建立追踪关系 ➜ /Users/fatli/Documents/GitHub/fatli git:(master) > git checkout --track origin/gh-pages Branch gh-pages set up to track remote branch gh-pages from origin. Switched to a new branch 'gh-pages'
实例二:
git clone 自 GitHub 上的仓库(假设有 master 和 gh-pages 分支)时,本地默认只显示 master 分支(追踪 GitHub 上的 master 分支),此时如果要在本地显示 gh-pages 分支(并设置(set up)追踪(track) GitHub 上的 gh-pages 分支):
# 方法一:使用 git checkout gh-pages 命令,此时切换到:本地新建的一个与远程主机同名的分支(基于origin/gh-pages分支),并且设置(set up)追踪(track)远程主机origin的gh-pages分支 # git checkout gh-pages 等同于 git checkout -b ph-pages origin/gh-pages ➜ /Users/fatli/Documents/GitHub > git clone git@github.com:fatlitalk/fatli.git # ...... ➜ /Users/fatli/Documents/GitHub > cd fatli ➜ /Users/fatli/Documents/GitHub/fatli git:(master) > git checkout gh-pages Branch gh-pages set up to track remote branch gh-pages from origin. Switched to a new branch 'gh-pages' ➜ /Users/fatli/Documents/GitHub/fatli git:(gh-pages) > git add test.md ➜ /Users/fatli/Documents/GitHub/fatli git:(gh-pages) ✗ > git commit -m "add test.md" # ...... ➜ /Users/fatli/Documents/GitHub/fatli git:(gh-pages) > git push
# 方法二:使用 git checkout -b newBranch origin/gh-pages 命令,此时切换到:本地新建的一个名为newBranch的分支(基于origin/gh-pages分支),并且设置(set up)追踪(track)远程主机origin的gh-pages分支 ➜ /Users/fatli/Documents/GitHub > git clone git@github.com:fatlitalk/fatli.git # ...... ➜ /Users/fatli/Documents/GitHub > cd ./fatli ➜ /Users/fatli/Documents/GitHub/fatli git:(master) > git checkout -b newBranch origin/gh-pages Branch newBranch set up to track remote branch gh-pages from origin. Switched to a new branch 'newBranch' ➜ /Users/fatli/Documents/GitHub/fatli git:(newBranch) ✗ > git add . ➜ /Users/fatli/Documents/GitHub/fatli git:(newBranch) ✗ > git commit -m "delete test02.md" # ...... ➜ /Users/fatli/Documents/GitHub/fatli git:(newBranch) ✗ > git push origin newBranch:gh-pages
注意:上面的 git push origin newBranch:gh-pages 命令,使用 git push 或 git push origin 将失败(本地分支名与远程主机的分支名同名,并且存在“追踪关系”(tracking)才可以采用这种省略写法),使用 git push origin newBranch 将在 GitHub 创建一个名为 newBranch 的分支。具体见下面标题” git push “。
git push origin newBranch:gh-pages
git push
git push origin
git push origin newBranch
箭头三: git remote add origin git@github.com:FatliTalk/jekyll_demo.git 表示关联远程(remote)仓库。
git remote add origin git@github.com:FatliTalk/jekyll_demo.git
git remote add <主机名> <网址>
git remote :列出所有远程主机。Git 要求每个远程主机都必须指定一个主机名, git remote命令就用于管理远程主机名。(克隆版本库的时候,所使用的远程主机自动被 Git 命名为 origin )
git remote
➜ /Users/fatli/Documents/jekyll_demo git:(gh-pages) > git remote origin
git remote -v :参看远程主机的网址:
git remote -v
➜ /Users/fatli/Documents/jekyll_demo git:(gh-pages) > git remote -v origin git@github.com:FatliTalk/jekyll_demo.git (fetch) origin git@github.com:FatliTalk/jekyll_demo.git (push)
git remote show <主机名> :查看该主机的详细信息:
git remote show <主机名>
➜ /Users/fatli/Documents/jekyll_demo git:(gh-pages) > git remote show origin * remote origin Fetch URL: git@github.com:FatliTalk/jekyll_demo.git Push URL: git@github.com:FatliTalk/jekyll_demo.git HEAD branch: master Remote branches: gh-pages tracked master tracked Local branch configured for 'git pull': gh-pages merges with remote gh-pages Local ref configured for 'git push': gh-pages pushes to gh-pages (local out of date)
箭头五: git push 表示将本地的 gh-pages 分支推送到 origin 主机的 gh-pages 分支(远程分支)。注意:本地分支名与远程主机的分支名同名,并且存在“追踪关系”(tracking)才可以采用这种省略写法。
git push <远程主机名> <本地分支名>:<远程分支名>
git push [remote] [branch]
git push [remote] --force
git push [remote] --all
删除远程分支
注意: git push origin :gh-pages 等同于 git push origin --delete gh-pages ,表示删除远程主机 origin 的 gh-pages 分支,不要误用。实例:操作失误导致删除了 GitHub 上的 gh-pages 分支,把从GitHub上 git clone 下来的本地分支(命名为newBranch并track追踪origin/gh-pages)恢复到 GitHub 上,操作如下(分布式版本控制的好处,分布式备份):
git push origin :gh-pages
git push origin --delete gh-pages
➜ /Users/fatli/Documents/GitHub/fatli git:(newBranch) ✗ > git push origin :gh-pages To github.com:fatlitalk/fatli.git - [deleted] gh-pages ➜ /Users/fatli/Documents/GitHub/fatli git:(newBranch) ✗ > git push origin newBranch:gh-pages
追踪远程分支
注意:箭头四表示设置(set up)本地分支追踪(track)远程主机origin的gh-pages分支。
语法: git push -u <remote name> <branch name> ,参数 -u 表示(本地分支与远程主机分支)建立追踪关系(tracking)。 注:在 git clone 的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的 master 分支自动"追踪" origin/master 分支。
git push -u <remote name> <branch name>
-u
git push --set-upstream origin gh-pages # 等同于 git push -u origin gh-pages
git pull :取回远程主机某个分支的更新,再与本地的指定分支合并。
git pull
使用场景:因为远程主机某个分支的更新(例如在 github.com 上直接修改了分支的内容,而本地主机并不会作相应更新),导致在本地进行 git push 失败,此时需要执行 git pull 取回远程主机对应分支的更新,与本地的指定分支合并。
git pull <远程主机名> <远程分支名>:<本地分支名>
如果当前分支只有一个追踪分支,连远程主机名都可以省略:
实例:上图箭头所示,执行 git pull 命令,当前分支自动与唯一一个追踪分支进行合并。
实例:指定 myBranch 分支追踪 origin/next 分支:
git branch --set-upstream myBranch origin/gh-pages # 等同于 git branch -u myBranch origin/gh-pages
注意:git 1.8.0 中 git branch --set-upstream 已弃用,以后可能会被删除 。建议使用 git branch -u 或 git branch --set-upstream-to 。
git branch --set-upstream
git branch -u
git branch --set-upstream-to
如果当前分支与远程分支存在追踪关系(tracking),例如从远程主机 git clone 下来的分支默认自动追踪远程分支, git pull 就可以省略远程分支名:
git pull origin
如果是取回远程主机某个分支与当前分支合并,则冒号后面的部分可以省略,例如取回 GitHub 上的 gh-pages 分支与当前分支合并:
git pull origin gh-pages
实质上,这等同于先做 git fetch ,再做 git merge :
git fetch
git merge
git fetch origin git merge origin/gh-pages
远程主机的版本库有了更新(有了新的 commit ),需要将这些更新取回本地:
git fetch <远程主机名>
默认情况下, git fetch 取回所有分支( branch )的更新。取回特定分支的更新:
git fetch <远程主机名> <远程分支名>
注意: git fetch 命令通常用来查看其他人的进程( commit ),因为它取回的代码对你本地的开发代码没有影响(不新增、减少、修改本地代码,只记录在 Git 中),除非使用 git merge 命令与本地分支合并。
git branch -a
git branch -r
➜ /Users/fatli/Documents/jekyll_demo git:(gh-pages) > git branch -a * gh-pages remotes/origin/gh-pages remotes/origin/master ➜ /Users/fatli/Documents/jekyll_demo git:(gh-pages) > git branch -r origin/gh-pages origin/master
注意:上面实例中, 星号 表示本地主机的当前分支是 gh-pages ,远程分支是 origin/gh-pages 和 origin/master 。
星号
git fetch 取回远程主机的更新(有了新的 commit )以后,可以在它(远程分支)的基础上,使用 git checkout 命令创建一个新的分支:
此外,也可以使用 git merge 命令或者 git rebase 命令,在本地分支上合并远程分支。
git rebase
实例:在 github.com 中新增一个 test.txt 文件, 执行 git fetch 命令后本地主机中并不会多出一个 test.txt 文件,直到执行 git merge 命令:
➜ /Users/fatli/Documents/jekyll_demo git:(gh-pages) > git fetch # ...... ➜ /Users/fatli/Documents/jekyll_demo git:(gh-pages) > ls -a . .DS_Store README.md _layouts images .. .git _config.yml _posts index.html ➜ /Users/fatli/Documents/jekyll_demo git:(gh-pages) > git merge # ...... ➜ /Users/fatli/Documents/jekyll_demo git:(gh-pages) ✗ > ls -a . .DS_Store README.md _layouts images test.txt .. .git _config.yml _posts index.html
参考:
Git 远程操作常用命令:
实例一:新建本地 gh-pages 分支并推送到远程分支
1. git checkout
箭头二:
git checkout --orphan gh-pages
表示创建一个新的(孤立)分支 gh-pages (本地新建 Git 仓库,默认分支为 master ),并 checkout 切换到 gh-pages 分支中。Git 1.7.2 开始支持
git checkout --orphan <新的本地分支>
。应用场景:
在一个项目的任何时候,您都可以从一个干净的分支开始。一般用于本地新建仓库并新建分支时(不是
git clone
)或开始一个新的分支时时(见下文)。 注意:Orphan branches can't be (reasonably) merged 。假如你的某个分支上,积累了无数次的提交,你也懒得去打理,打印出的 log 也让你无力吐槽,那么这个命令将是你的神器,它会基于当前所在分支新建一个赤裸裸的分支,没有任何的提交历史,但是当前分支的内容一一俱全。新建的分支,严格意义上说,还不是一个分支,因为 HEAD 指向的引用中没有 commit 值,只有在进行一次提交后,它才算得上真正的分支。
语法:
git branch [branchname]
git checkout -b [branch]
git checkout 使用实例
git clone
克隆远程仓库时,本地通常会自动地创建一个追踪 origin/master 的 master 分支。 当然也可以手动设置( 使用git checkout
切换分支)其他分支(追踪远程主机的其他分支)。实例一:
建立跟踪分支最常用的方式:
git checkout --track <远程主机名>/<远程分支名>
,等同于git checkout -b <本地分支名> --track <远程主机名>/<远程分支名>
:实例二:
git clone
自 GitHub 上的仓库(假设有 master 和 gh-pages 分支)时,本地默认只显示 master 分支(追踪 GitHub 上的 master 分支),此时如果要在本地显示 gh-pages 分支(并设置(set up)追踪(track) GitHub 上的 gh-pages 分支):注意:上面的
git push origin newBranch:gh-pages
命令,使用git push
或git push origin
将失败(本地分支名与远程主机的分支名同名,并且存在“追踪关系”(tracking)才可以采用这种省略写法),使用git push origin newBranch
将在 GitHub 创建一个名为 newBranch 的分支。具体见下面标题” git push “。2. git remote
箭头三:
git remote add origin git@github.com:FatliTalk/jekyll_demo.git
表示关联远程(remote)仓库。语法:
git remote
:列出所有远程主机。Git 要求每个远程主机都必须指定一个主机名,git remote
命令就用于管理远程主机名。(克隆版本库的时候,所使用的远程主机自动被 Git 命名为 origin )git remote -v
:参看远程主机的网址:git remote show <主机名>
:查看该主机的详细信息:3. git push
箭头五:
git push
表示将本地的 gh-pages 分支推送到 origin 主机的 gh-pages 分支(远程分支)。注意:本地分支名与远程主机的分支名同名,并且存在“追踪关系”(tracking)才可以采用这种省略写法。语法:
git push [remote] [branch]
git push [remote] --force
git push [remote] --all
删除远程分支
注意:
git push origin :gh-pages
等同于git push origin --delete gh-pages
,表示删除远程主机 origin 的 gh-pages 分支,不要误用。实例:操作失误导致删除了 GitHub 上的 gh-pages 分支,把从GitHub上git clone
下来的本地分支(命名为newBranch并track追踪origin/gh-pages)恢复到 GitHub 上,操作如下(分布式版本控制的好处,分布式备份):追踪远程分支
注意:箭头四表示设置(set up)本地分支追踪(track)远程主机origin的gh-pages分支。
语法:
git push -u <remote name> <branch name>
,参数-u
表示(本地分支与远程主机分支)建立追踪关系(tracking)。 注:在git clone
的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的 master 分支自动"追踪" origin/master 分支。实例二: git pull 取回远程分支更新并与本地分支合并
使用场景:因为远程主机某个分支的更新(例如在 github.com 上直接修改了分支的内容,而本地主机并不会作相应更新),导致在本地进行
git push
失败,此时需要执行git pull
取回远程主机对应分支的更新,与本地的指定分支合并。语法:
1. git pull
如果当前分支只有一个追踪分支,连远程主机名都可以省略:
实例:上图箭头所示,执行
git pull
命令,当前分支自动与唯一一个追踪分支进行合并。附: git branch -u 手动建立本地分支与远程分支的追踪关系:
实例:指定 myBranch 分支追踪 origin/next 分支:
注意:git 1.8.0 中
git branch --set-upstream
已弃用,以后可能会被删除 。建议使用git branch -u
或git branch --set-upstream-to
。2. git pull <远程主机名>
如果当前分支与远程分支存在追踪关系(tracking),例如从远程主机
git clone
下来的分支默认自动追踪远程分支,git pull
就可以省略远程分支名:3. git pull <远程主机名> <远程分支名>
如果是取回远程主机某个分支与当前分支合并,则冒号后面的部分可以省略,例如取回 GitHub 上的 gh-pages 分支与当前分支合并:
实质上,这等同于先做
git fetch
,再做git merge
:4. git fetch
远程主机的版本库有了更新(有了新的 commit ),需要将这些更新取回本地:
默认情况下,
git fetch
取回所有分支( branch )的更新。取回特定分支的更新:注意:
git fetch
命令通常用来查看其他人的进程( commit ),因为它取回的代码对你本地的开发代码没有影响(不新增、减少、修改本地代码,只记录在 Git 中),除非使用git merge
命令与本地分支合并。附:git branch -a 查看所有分支
git branch -a
:查看所有分支git branch -r
:查看远程分支注意:上面实例中,
星号
表示本地主机的当前分支是 gh-pages ,远程分支是 origin/gh-pages 和 origin/master 。5. git merge 或 git rebase
git fetch
取回远程主机的更新(有了新的 commit )以后,可以在它(远程分支)的基础上,使用git checkout
命令创建一个新的分支:此外,也可以使用
git merge
命令或者git rebase
命令,在本地分支上合并远程分支。实例:在 github.com 中新增一个 test.txt 文件, 执行
git fetch
命令后本地主机中并不会多出一个 test.txt 文件,直到执行git merge
命令: