我在 git 中有一些暂存和一些未暂存的更改,以及一些未跟踪的文件。我想保留未暂存的更改和未跟踪的文件,并丢弃暂存的更改。
在命令行上执行此操作的最简单方法是什么?
假设我有一个master分支,其中包含一些提交,我希望保留这些提交以供以后的文档和参考,但是将它们从master删除(因为我希望master与上游回购处于相同状态)。
我现在的方法是
现在,我的问题是:
通常以以下方式显示分支,其中(据我所知)D是新分支的基础。
A - B - C - D (master)
\
(new branch)
Run Code Online (Sandbox Code Playgroud)
分支是自动“重新设置基础”的,还是您将如何称呼它?然后看起来像这样吗?
A - B (master)
\
C - D (new branch)
Run Code Online (Sandbox Code Playgroud)
最后也是最普遍的问题:
reset --hard主分支中的方法是否正确实现了我的目标,即在B不合并提交(C和D)的情况下使派生回到上游状态(commit )的正确方法?我们可以压缩 中的最后 N 次提交Git。据我了解,我们可以使用git rebase -i HEAD~Nor压缩最后 N 次提交git reset --soft HEAD~N。
在这个问题的答案中(使用 Git 将我的最后 X 次提交压在一起)最受好评的答案建议是使用git reset --soft HEAD~N,但这不是被接受的建议。接受答案建议git rebase -i HEAD~N。因此我很困惑,更喜欢使用哪一个。
这些方法有何不同?推荐使用哪一种或安全使用哪一种?
该文档指出利用--soft选项"...根本不触及索引文件或工作树,但要求它们处于良好的顺序.这将保留所有已更改的文件"要提交的更改",作为git status会说".
它还解释了<commit>当没有给出时,目标默认为HEAD.
考虑到这些,以下命令是否会修改任何内容?
$ git reset --soft
有时,当结果 a 生成自动合并时,我的合作者会“恐慌” git-pull,并且只接受默认提交消息。在此提交被推送之前,我想确保消息得到修复,但--amend似乎不起作用。修复在这种情况下生成的消息的最佳方法是什么。我能为他们提出的最好的说明是
git reset --soft HEAD~
git merge -m <message> <the tracked remote branch>
Run Code Online (Sandbox Code Playgroud)
但这似乎有点可怕 ( reset) 并且容易出错(必须明确输入远程跟踪分支)。
是否有一种简单的方法可以更改刚刚通过与远程跟踪存储库合并生成的提交消息?为什么不起作用--amend?
在当地主分公司工作:
git commit -m "Lots of important commits"
git reset --hard origin/master
Run Code Online (Sandbox Code Playgroud)
如何检索由于git重置(从远程)丢失的提交?
编辑:请注意,这不是关于检索未提交的更改.
我在这种情况下有一个git目录:
ProgSoul@PROGSOUL-LENOVO:~/esercizio3_2$ git status
Sul branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: A
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: A
Untracked files:
(use "git add <file>..." to include in what will be committed)
B
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我有:
我的老师希望我暂时中止工作,创建一个BUGFIX文件,提交并恢复以前的状态。
我通过以下命令实现了它:
git stash --include-untracked
touch BUGFIX
git add BUGFIX
git …Run Code Online (Sandbox Code Playgroud) 我不小心对我的git repo做了些什么,我不知道我是否可以保存我的项目......
我做了一些改变.然后我想删除我的最后一次提交,以便我可以改为进行新的提交.我忘了做git stash.因此,当我跑步时,git reset --hard [second-to-last commit]它删除了我所做的一切.这是愚蠢的,但有什么我可以做的来拯救我最近的工作?
我正在使用Eclipse IDE.
我在这里遇到了一些git-funk.我需要自己解决这个问题.
我加入了一个新团队并创建了一个功能分支:
git checkout -b feature_branch
做了一些更改,然后将它们提交/推送到分支机构.
git commit -am "Changes"
git push origin feature_branch
Run Code Online (Sandbox Code Playgroud)
有人在我的公关上留下了评论,所以我做了更改,然后检查掌握并重新设置我的分支,然后再次提交/推送到该分支:
// from feature_branch make some changes
git commit -am "New changes"
git checkout master
git checkout feature_branch
git rebase origin/master
git push feature_branch
Run Code Online (Sandbox Code Playgroud)
一旦我这样做,我注意到我的PR(在Github上)拿起了别人的提交.然后我被告知这个新团队中的典型方法是结账并掌握并合并回我的分支机构INSTEAD的变基.
现在这是一个时髦的部分 - 我开始捣乱,git reset --hard并选择了我想要的提交,然后再提交给别人.
一切都很好,或者我认为.然后我把它推了起来,它似乎已经从我的公关中删除了其他人的承诺.
我今天早上检查了一下,现在有一些其他人提交的其他提交.
所以现在我处于这种奇怪的状态.我看看我的PR,有近30个提交(其中6个来自不同的人).实际的差异(文件已更改)只是我触摸的文件,这很好,但历史本身看起来很荒谬.
清理它的最佳方法是什么?一切都建议使用git rebase,但是,我被建议不要使用rebase.
不幸的是,我需要保留这个分支.什么是最好的方法来清除它并删除所有其他提交,除了我的?只需完全重置它然后樱桃挑选更改回到分支?
请帮忙:|
编辑:以下是历史记录的示例:
Commits on Jul 30, 2018
<SOMEONE ELSES>
Commits on Jul 31, 2018
<SOMEONE ELSES>
<MY ORIGINAL COMMIT>
<SOMEONE ELSES>
Commits on Aug 1, …Run Code Online (Sandbox Code Playgroud) 我提交并推送我的代码3次,分别是Submit 1,Submit 2和Submit 3。
我希望将我的代码回滚到Submit 2并将其推送到远程存储库。
因此,我对“提交2”点(请参阅图像“ 执行还原”),“文件与冲突合并”对话框显示(请参见图像文件合并)和“合并”的子对话框进行了还原操作,就像图像“合并的孩子”一样。
答:我不明白为什么执行还原操作时会显示以下代码?看来系统已准备好所有历史记录提交记录以让我合并。
码
<<<<<<< HEAD
//Submit 3
=======
//Submit 1
>>>>>>> parent of 86821fc... Submit 2
Run Code Online (Sandbox Code Playgroud)
B:而且,无论我选择接受,接受还是合并...命令,我都无法得到正确的结果(将代码回滚到Submit 2)。为什么?
C:如果启动“合并...”操作,系统将如何处理?
git ×10
git-reset ×10
commit ×2
eclipse ×1
git-branch ×1
git-commit ×1
git-merge ×1
git-rebase ×1
git-remote ×1
git-revert ×1
git-squash ×1
git-stash ×1
github ×1
rebase ×1
revert ×1