在Git上,说我弄乱了我的提交,我想让版本3提交以前作为新版本.如果我这样做git checkout xxxx
,它会创建一个新的分支,似乎我只能合并它?我可以把它变成新的"主版"吗?
我想要:
A-B-C-D-E
Run Code Online (Sandbox Code Playgroud)
成为
A-B-C-D-E-F
Run Code Online (Sandbox Code Playgroud)
其中F与C的内容完全相同
如果我使用git revert xxxx
,它似乎肯定会有冲突,我需要手动解决它.
我真正想要的只是在某个时刻进行旧提交新的提交,无论我的工作目录或最新的提交是什么.
我该怎么做呢?
svi*_*ick 203
git rm -r .
git checkout HEAD~3 .
git commit
Run Code Online (Sandbox Code Playgroud)
提交后,新文件HEAD
将与修订版中的文件相同HEAD~3
.
Mic*_*zek 30
听起来你只想重置为C; 那就是树:
ABC
你可以这样做reset
:
git reset --hard HEAD~3
Run Code Online (Sandbox Code Playgroud)
(注意:你说过三次提交,所以这就是我写的;在你的例子中C只有两次提交,所以你可能想要使用HEAD~2
)
您也可以revert
根据需要使用,但据我所知,您需要一次恢复一个:
git revert HEAD # Reverts E
git revert HEAD~2 # Reverts D
Run Code Online (Sandbox Code Playgroud)
这将创建一个新的提交F,它与D的内容相同,而G的内容与C相同.rebase
如果你想要,你可以将它们压缩在一起
elo*_*one 16
这正是我想要做的.我不确定上一个命令git cherry-pick C
,它听起来不错,但似乎你这样做是为了从另一个分支获得更改,但不是在同一个分支上,有人试过吗?
所以我做了一些其他的工作:我从旧的提交文件中获取了我想要的文件
git checkout <commit-hash> <filename>
Run Code Online (Sandbox Code Playgroud)
例如:
git checkout 08a6497b76ad098a5f7eda3e4ec89e8032a4da51 file.css
- >这会从旧提交中获取文件
然后我做了我的改变.我再次承诺.
git status (to check which files were modified)
git diff (to check the changes you made)
git add .
git commit -m "my message"
Run Code Online (Sandbox Code Playgroud)
我查看了我的历史记录git log
,我仍然记录了我的历史以及从旧文件中做出的新更改.我也可以推动.
请注意,要返回到您想要的状态,您需要在不需要的更改之前放置提交的哈希值.在执行此操作之前,请确保没有未提交的更改.
Nic*_*ser 15
eloone按文件归档
git checkout <commit-hash> <filename>
Run Code Online (Sandbox Code Playgroud)
但你可以通过这样做更容易地检查所有文件
git checkout <commit-hash> .
Run Code Online (Sandbox Code Playgroud)
小智 7
git cherry-pick C
其中C是C的提交哈希.这将在最新的提交之上应用旧提交.
归档时间: |
|
查看次数: |
166410 次 |
最近记录: |