我正在尝试提出一系列git命令,这些命令将更改为预先存在的git repo中的已知分支。我知道的三件事是:
origin
这就是我在做的事情:
git clean -xfd
git reset HEAD --hard
git add --all; git stash; git stash drop
git fetch origin
git checkout -B $BRANCH
git pull origin $BRANCH
这是实现此目的的最小git命令集吗?是否存在这些命令序列失败的情况?
答案 0 :(得分:1)
所以这个想法是你当前的结账可能处于一个完全被破坏的,可能是恶意的状态,而你想完全抛弃它?
git fetch
git checkout -f -B branch origin/branch
git clean -dfx
如果您没有子模块,就是您想要的。如果你这样做,核选项是
git read-tree --empty
git clean -dffx # <-- two f's, forces submodule removal
git fetch
git checkout -B branch origin/branch
git submodule update --init
(编辑:从find -exec rm切换到read-tree / clean)
不要使用git pull
来执行此操作,然后执行提取,然后将提取的历史记录合并到当前结帐中。首先执行git checkout -B branch
只标记当前的结帐branch
,因此结果和拉动距离切换到原点的分支很远。
答案 1 :(得分:0)
你可以做得更简单:
git fetch --all --prune
git pull origin <branch>
如果您正在执行git reset --hard
,则无需使用git stash
,因为您的工作目录将被清除
git reset HEAD --hard
<强>
get reset --hard
强>
重置索引和工作树。
之后对工作树中跟踪文件的任何更改都将被丢弃。
我想撤消在此文件夹中进行的任何临时(暂存或未暂停)更改。
无需这样做,因为除非您明确添加,否则所有未提交的内容都不会添加到您的分支中
仍然要清理当前的工作目录
# small x
git clean -xfd
# capital x
git clean -Xfd
-x
不要使用从.gitignore(每个目录)和$ GIT_DIR / info / exclude读取的标准忽略规则,但仍然使用-e选项给出的忽略规则。这允许删除所有未跟踪的文件,包括构建产品。这可以使用(可能与git reset一起使用)来创建一个pristine工作目录来测试一个干净的构建。
<强>
-X
强>
仅删除Git忽略的文件 这可能有助于从头开始重建所有内容,但保留手动创建的文件。