所以我有以下情况:
我在本地提交了一些工作,而没有推送到远程存储库。我想将这个本地代码移动到另一个分支,因为如果我拉,将会有一些修改会破坏我在本地放置的所有工作。
这是旧分支上“git status”的输出:
“在分支上 您的分支在1个提交之前超过'origin /'。 (使用“git push”发布您的本地提交) 无需提交,工作目录清理 “
这是新创建的分支上“git status”的输出:
“在分支上 无需提交,工作目录清理“
答案 0 :(得分:7)
在我看来,答案是:
git checkout -b new-branch
git checkout -
git reset --hard origin
答案 1 :(得分:4)
如果它只是一次提交,你可以简单地执行
git reset HEAD~1
git stash
git checkout anotherbranch
git stash pop
如果你想把它放在一个全新的分支中,另一种方式是
git branch newbranch
git reset --hard HEAD~1
答案 2 :(得分:2)
如果您在提交后创建了分支,则应该包含您要移动的提交。您可以使用def repaired_corpus(path):
_buffer = ""
for line in open(path):
doc_end = line.find(doc_end_pattern)
if doc_end != -1:
_buffer += line[:doc_end + len(doc_end_pattern)]
yield _buffer
_buffer = ""
else:
_buffer += line
some_state = sc.broadcast(my_state)
in_rdd = spark.sparkContext.parallelize(repaired_corpus(path))
json_docs = in_rdd.map(
lambda item: process_element(
item, some_state.value
)
).saveAsTextFile("processed_corpus.out")
验证这一点,您应该在日志中看到您的提交作为第一个。
在您不再希望提交的分支上git log
。这将从分支中删除提交并重置分支,以便您现在可以毫无问题地进行提取。 (确保你的提交在另一个分支上,因为这样做后你的提交就会消失了。)
如果提交不在您的其他分支上,您可以删除分支并使用git reset --hard HEAD~
从原始分支再次创建它,或者您可以使用git checkout -b <branch name>
将其选择到您的分支中。将在您的分支上复制提交。然后,您可以使用上述步骤重置原始分支。
答案 3 :(得分:2)
看看这个答案,它会很有用:https://stackoverflow.com/a/65263420/854405
答案 4 :(得分:0)
这就是我要做的事情:
# Switch back to the old branch (where the commit was initially made)
git checkout old_branch
# Make this branch point to its previous state (not containing the new commit)
git reset --hard origin/old_branch
# pull the changes
git pull
答案 5 :(得分:0)
你有选择:
我确信还有更多选择。这取决于你的具体情况,哪一个最好。
答案 6 :(得分:0)
现状:
(如果我理解正确的话):
This is what you want:
Branch A -> |<---Commit A--->|
\
Branch B ->|<---Commit B--->|
But This is what you currently have:
Branch A -> |<--- Commit A --->| -> |<--- Commit B --->|
如何到达那里?
现在,分支A的ref指向提交B SHA。我们需要它指向提交A.我们如何做到这一点?
git checkout branch-A
git reset HEAD~1 --mixed
git checkout -b new-branch-name
git commit -am ‘fix ABC bug’
瞧!非常简单!
更好的解决方案
另一种方法是在分支A到HEAD~1上执行--hard重置,并简单地从commit b中检出新分支 - 最新提交。在这种情况下,我们不会添加任何不必要的提交。