远程仓库
查看远程仓库: git remote -v
添加远程仓库: git remote add <repoName> <url>
拉取远程仓库数据: git fetch <repoName>
这个命令会访问远程仓库,从中拉取所有你还没有的数据。 执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看。如果你使用 clone
命令克隆了一个仓库,命令会自动将其添加为远程仓库并默认以 “origin” 为简写。
运行 git pull
通常会从最初克隆的服务器上抓取数据并自动尝试合并到当前所在的分支。
推送到远程仓库: git push <repoName> <branch>
$
git push origin master // 表示将master branch推送到origin。
1)只有当你有所克隆服务器的写入权限,并且之前没有人推送过时,这条命令才能生效。
2)当你和其他人在同一时间克隆,他们先推送到上游然后你再推送到上游,你的推送就会毫无疑问地被拒绝。 你必须先将他们的工作拉取下来并将其合并进你的工作后才能推送。
查看某个远程仓库: git remote show [repoName]
重命名远程仓库: git remote rename <old> <new>
删除远程仓库: git remote rm <repoName>
远程分支
远程引用是对远程仓库的引用(指针),包括分支、标签等等。 你可以通过 git ls-remote [
remoteRepo]
来显式地获得远程引用的完整列表,或者通过 git remote show [remote]
获得远程分支的更多信息。 然而,一个更常见的做法是利用远程跟踪分支。
跟踪分支:
1)从一个远程跟踪分支检出一个本地分支会自动创建一个叫做 “跟踪分支”。 跟踪分支是与远程分支有直接关系的本地分支。
2)运行 git checkout --track [remotename]/[branch],如果想要将本地分支与远程分支设置为不同名字:
git checkout --track [branch] [remotename]/[branch]
3)设置已有的本地分支跟踪一个刚刚拉取下来的远程分支,或者想要修改正在跟踪的上游分支,你可以在任意时间使用 -u
或 --set-upstream-to
选项运行 git branch
来显式地设置。
$
git branch -u origin/serverfixBranch serverfix set up to track remote branch serverfix from origin.
4) 如果想要查看设置的所有跟踪分支,可以使用 git branch
的 -vv
选项
git branch -vv
推送:git push
运行 git push (remote) (branch),
Git 自动将 serverfix
分支名字展开为refs/heads/serverfix:refs/heads/serverfix
,那意味着,“推送本地的 serverfix 分支来更新远程仓库上的 serverfix 分支。”
也可以运行 git push origin serverfix:serverfix
,它会做同样的事 - 相当于它说,“推送本地的 serverfix 分支,将其作为远程仓库的 serverfix 分支” 可以通过这种格式来推送本地分支到一个命名不相同的远程分支。 比如:可以运行 git push origin serverfix:awesomebranch
来将本地的 serverfix
分支推送到远程仓库上的awesomebranch
分支。
拉取: git fetch/pull
当 git fetch
命令从服务器上抓取本地没有的数据时,它并不会修改工作目录中的内容。 它只会获取数据然后让你自己合并。
而 git pull
在大多数情况下它的含义是一个 git fetch
紧接着一个 git merge
命令。
删除远程分支: git push <repoName> --delete <branch>
基本上这个命令做的只是从服务器上移除这个指针。 Git 服务器通常会保留数据一段时间直到垃圾回收运行,所以如果不小心删除掉了,通常是很容易恢复的。
Others
git rebase/merge/cherry-pick
merge 命令把不同分支合并起来。rebase 是 merge 命令的另一种选择。merge 把两个父分支合并进行一次提交,提交历史不是线性的。衍合在当前分支上重演另一个分支的历史,提交历史是线性的。 本质上,这是线性化的自动的 cherry-pick
git checkout 命令用于从历史提交(或者暂存区域)中拷贝文件到工作目录,也可用于切换分支。比如:
git checkout HEAD~ files
git checkout otherBranch
git reset 命令把当前分支指向另一个位置,并且有选择的变动工作目录和索引。也用来在从历史仓库中复制文件到索引,而不动工作目录。如果不给选项,那么当前分支指向到那个提交。如果用--hard
选项,那么工作目录也更新,如果用--soft
选项,那么都不变。 git rebase [HEAD~3]
如果给了文件名(或者 -p
选项), 那么工作效果和带文件名的checkout差不多,除了索引被更新。比如:
git rebase -- files