考虑我已经提交了一个db/schema.rb我不打算改变的文件(例如).我需要去做:
git reset db/schema.rb
git checkout db/schema.rb
Run Code Online (Sandbox Code Playgroud)
我可以通过单一命令来完成吗?
我向主人做了一堆提交,并意识到他们应该在一个分支中.
我已经看过各种关于变基和合并以及重置主人的事情.但是没有任何操纵尝试产生了一个看起来像我正在尝试做的事情的历史.
我的尝试让我相信它需要一些组合rebase --onto并将reset --hard主人及时移回.但是我对Git分支的理解还有待改进.这样做的一部分是学习如何使用它.
应该注意的是,我试图移动的所有变化都没有被推出.
当前
* remote/trunk
--o--a--b--c--d--e--f <- master
|
o <- remote branch foo
Run Code Online (Sandbox Code Playgroud)
期望的结果
* remote/trunk
--o <- master
|
o--a--b--c--d--e--f <- remote branch foo
Run Code Online (Sandbox Code Playgroud) 我有一个问题与我的问题最匹配,但无法添加评论.
git:你的分支和'origin/master'有分歧 - 如何丢弃本地提交?
我运行了上述问题的提示和答案,但没有决定.我正在使用sofwae源代码树跟踪进度图表.我关闭软件并在bash git中运行命令.但是引用了同样的错误.
# Your branch and 'origin/master' have diverged,
# and have 7 and 11 different commits each, respectively.
# (use "git pull" to merge the remote branch into yours)
Run Code Online (Sandbox Code Playgroud)
我也面临同样的问题.按照运行2个comentos的步骤但没有工作.我认为我的问题是,在我为一个单独的头部结账之前,在个人头部做了一个提交,然后我回到了树枝/主人,并且承诺我做了,我相信引用树头个人.总之,我无法撤消此提交,我在SourceTree软件上以图形方式显示
编辑 - 添加信息: 我想抛弃未发布的提交并进行服务器检出.但解决方案我发现互联网不起作用.我也在gitBash中尝试了git reverse,控制台显示了我开发的消息
$ Git status
On branch processos_criminais_151029
Your branch and 'origin / processos_criminais_151029' have diverged,
and 7 and 11 have different commits each, respectivamente.
(use "git pull" to merge the remote branch into yours)
Changes not staged for commit:
(use "git …Run Code Online (Sandbox Code Playgroud) 假设我的历史就是这样:
A - B - C - D(主)
如果我这样做git reset B,我会得到:
A - B(主人)
麻烦的是,git log现在只向我展示从A到B的历史,我再也看不到C和D.
我怎么能回到D?
在最近的回答中,他详细介绍的典型应用案例git-reset的三个最常用的选项(--hard,--mixed,和--soft),托雷克顺便提到的是git-reset还提供了两个比较深奥的标志,被称为--merge和--keep.该git-reset手册页描述了如下的两个标志:
Run Code Online (Sandbox Code Playgroud)--merge Resets the index and updates the files in the working tree that are different between <commit> and HEAD, but keeps those which are different between the index and working tree (i.e. which have changes which have not been added). If a file that is different between <commit> and the index has unstaged changes, reset is aborted. In …
我在使用git commit提交的目录中进行了一些本地更改.后来我意识到错误地我的改变打破了我的构建.所以我在我的仓库上做了一个"git reset --soft".但我搞砸了,因为我没有备份所有未完成的更改,因为其中一些确实包含了我想要的新功能.有关如何撤消"git reset --soft"操作的任何帮助,以便我可以恢复我提交的更改.
我已经阅读 了文档,但是我很难理解它们之间的区别
git reset --merge
Run Code Online (Sandbox Code Playgroud)
和
git reset --keep
Run Code Online (Sandbox Code Playgroud)
请提供简单的解释和/或示例.
以下是推送的提交历史记录。
Commit Changed Files
Commit 1| (File a, File b, File c)
Commit 2| (File a, File b, File c)
Commit 3| (File a, File b, File c)
Commit 4| (File a, File b, File c)
Commit 5| (File a, File b, File c)
Run Code Online (Sandbox Code Playgroud)
我想恢复对Commit 3 的File b发生的更改 。 但我希望在提交 4 和 5 中对这个文件进行更改。
我有一个修改过的文件,我想对最新提交中的任何内容进行反复处理,但是它"卡住",总是被标记为已修改.
$ git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: index.php
#
no changes added to commit (use "git add" and/or "git commit -a")
Run Code Online (Sandbox Code Playgroud)
然后我尝试:
$git checkout -- index.php
Run Code Online (Sandbox Code Playgroud)
但是git状态的输出仍然是相同的.然后我尝试:
$git reset --hard master
HEAD is now at 02c9613 test commit message
Run Code Online (Sandbox Code Playgroud)
并且git状态的输出仍然是相同的.
关于如何摆脱该文件假设的变化的任何想法?
我有一个有四个提交的回购:
$ git log --oneline --decorate
6c35831 (HEAD, master) C4
974073b C3
e27b22c C2
9f2d694 C1
Run Code Online (Sandbox Code Playgroud)
我reset -- soft去C2提交,现在我有一个像这样的回购:
$ git reset e27b22c --soft
$ git log --oneline --decorate
e27b22c (HEAD, master) C2
9f2d694 C1
Run Code Online (Sandbox Code Playgroud)
现在我添加一个额外的提交,所以日志看起来像这样:
$ git log --oneline --decorate
545fa99 (HEAD, master) C5
e27b22c C2
9f2d694 C1
Run Code Online (Sandbox Code Playgroud)
发生了什么事提交C3和C4?我没有删除它们,所以我认为它们仍在那里,C3我的父母仍在C2.
git ×10
git-reset ×10
git-commit ×3
git-checkout ×2
branch ×1
git-rebase ×1
git-revert ×1
git-svn ×1