Gab*_*iel 4 git branch sync github
我从两个主要位置推送代码:我家里的电脑和工作中的笔记本电脑.我使用Github来存储我的回购.
这是一个场景:我在我的PC上做了一些工作,我已经工作了一段时间(在我的电脑和我的笔记本电脑中),并以下列分支结束:
$ git branch
* master
* v123
* test-b
Run Code Online (Sandbox Code Playgroud)
我把它推到了Github.到现在为止还挺好.
现在我在我的笔记本电脑上,这是我在尝试拉动任何东西之前看到的:
$ git branch
* master
* v_123
Run Code Online (Sandbox Code Playgroud)
这是我的笔记本电脑中的旧版本(因为我一直在我的电脑上工作),其中存在以下差异:缺少分支(test-b),另一个已重新命名,或等效删除并重新创建一个新名称(即:v_123现在是v123),并且许多事情可能在所有分支中都发生了变化.
我想将我的所有分支同步到我的笔记本电脑中并正确跟踪它们.我已经看了两个最先进的投票问题,关于分支克隆/取回(如何克隆所有远程分支机构Git中?,如何获取所有的Git分支)和现在我有点失落.
是否有一些易于使用的git sync-branch --all命令可用于将我的笔记本电脑与Github中最新的repo状态同步?
ton*_*ton 37
我想你想要:
git fetch --all -Pp
Run Code Online (Sandbox Code Playgroud)
其中:
git fetch从另一个(远程)存储库下载对象和引用
--all获取所有遥控器。
-P删除遥控器上不再存在的任何远程跟踪引用。
-p删除远程上不再存在的所有本地标签。
更多用途git fetch --help
我们有一个类似的命令,仅执行修剪而不获取远程数据:
git remote prune origin
Run Code Online (Sandbox Code Playgroud)
我们还可以设置 git 客户端在每次获取数据时进行远程修剪:
git config --global fetch.prune true
Run Code Online (Sandbox Code Playgroud)
不确定,这是你所期望的.
git fetch origin
git reset --hard origin/master
git clean -f -d
Run Code Online (Sandbox Code Playgroud)
以上命令将使远程仓库与本地仓库同步.执行上述命令后,您的本地仓库将类似于远程仓库的镜像.
如果要将更改保留为非暂存文件,请使用--soft而不是--hard.
警告:当您这样做时,所有未跟踪的文件都将消失
git clean -f -d.
Lemme知道,如果有任何问题.
我有一个类似的问题:
在搜索了很多简单的解决方案之后,我最终得到了我自己的(不是那么简单)解决方案,基于一系列 git 别名(要添加到.gitconfig文件中的代码):https : //gist.github.com/arnauldvm /dcec7ee043c25dce30dbae1b576f2102
? 这是新代码,尚未经过严格测试。
用法: git sync
一些解释:
tracking = "!f() { git for-each-ref --format '%(refname:short):%(upstream:short)' 'refs/heads' | egrep -v ':$'; }; f"
Run Code Online (Sandbox Code Playgroud)
? 这将检索所有本地跟踪分支和相应的远程分支,以冒号分隔。
is-clean-workdir = "!f() { git diff --stat --exit-code || { echo \"Workdir dirty\"; exit 1; }; }; f"
is-clean-index = "!f() { git diff --stat --cached --exit-code || { echo \"Index dirty\"; exit 2; }; }; f"
is-clean = "!f() { git is-clean-workdir && git is-clean-index; }; f"
Run Code Online (Sandbox Code Playgroud)
? 这些将验证工作目录中没有挂起的更改。
co-merge = "!f() { local=\"$1\"; remote=\"$2\"; git checkout \"$local\"; git merge --ff-only \"$remote\"; }; f"
Run Code Online (Sandbox Code Playgroud)
? 这需要 2 个参数(一个本地分支和一个远程分支),它将检出本地分支并将其与远程分支合并。它用于--ff-only避免创建提交合并?如果发生分支本地分支,它会发出“致命:无法快进,中止”。STDERR 上的消息。
current-branch = rev-parse --abbrev-ref HEAD
Run Code Online (Sandbox Code Playgroud)
? 检索当前签出的分支的名称。最后将用于将工作目录恢复到其初始状态。
sync = "!f() { git is-clean || { echo Aborting sync.; exit 1; }; current=$(git current-branch); git fetch --all; git tracking | while IFS=: read local remote; do echo \"Merging $local with $remote\"; git co-merge \"$local\" \"$remote\"; done 3>&1 1>&2 2>&3 | egrep -i --color 'fatal|$' 3>&1 1>&2 2>&3; git checkout \"$current\"; }; f"
Run Code Online (Sandbox Code Playgroud)
? 这是主要部分。让我们把它分成几个部分:
git is-clean || { echo Aborting sync.; exit 1; }
Run Code Online (Sandbox Code Playgroud)
?? 如果工作目录中有待处理的工作,则中止命令。
current=$(git current-branch)
Run Code Online (Sandbox Code Playgroud)
?? 存储当前签出的分支的名称。
git fetch --all
Run Code Online (Sandbox Code Playgroud)
?? 同步来自所有遥控器 ( --all) 的远程分支。
git tracking | while IFS=: read local remote; do ...
Run Code Online (Sandbox Code Playgroud)
?? 迭代每个本地跟踪分支。
3>&1 1>&2 2>&3 | egrep -i --color 'fatal|$' 3>&1 1>&2 2>&3
Run Code Online (Sandbox Code Playgroud)
?? 突出显示错误(包含“致命”关键字)。“3>&1 1>&2 2>&3”神奇公式交换STDOUT和STDERR,需要能够通过管道将STDERR传递给egrep命令。
git checkout "$current"
Run Code Online (Sandbox Code Playgroud)
?? 将工作目录恢复到其初始状态。
| 归档时间: |
|
| 查看次数: |
20582 次 |
| 最近记录: |