相关疑难解决方法(0)

如何将新(重写)历史记录推送到远程存储库

基本上,我有一个我想要修复的开放拉取请求,同时我想将包含2个功能的1个提交分成两个单独的提交.

Github存储库现在看起来像修复是一个新的分支:

master c-c-c
            \
     fix c-c-c-c
Run Code Online (Sandbox Code Playgroud)

我从修复中创建了一个pull请求.

我想将修复中的最后一次提交更改为本地存储库中的2次提交,如下所示:

master c-c-c
            \
     fix c-c-c-n-n
Run Code Online (Sandbox Code Playgroud)

其中nn是我的2个新提交.

为了在本地达到这一点,我这样做了:

1. git rebase -i HEAD~2
2. Changed my last commit line to "edit", saved and closed the file
3. git reset HEAD^
4. git stash save
5. Removed the changes I don't want in the first commit
6. git commit -m "commit a" -a
7. git stash apply
8. git commit -m "commit b"
Run Code Online (Sandbox Code Playgroud)

所以现在我按照我想要的方式进行了2次提交.问题是我发现了一个最终出现在pull请求中的错误.由于我已经推送到远程存储库,它不会接受我的新提交(因为原来的提交现在已经丢失).

我跑:

git push origin fix --dry-run
Run Code Online (Sandbox Code Playgroud)

我得到的消息是:

To git@github.com:<UserName>/<Repository>.git …
Run Code Online (Sandbox Code Playgroud)

git github

37
推荐指数
1
解决办法
3万
查看次数

将本地仓库重置为与远程仓库完全相同

如何重置本地git仓库与远程仓库完全相同?

我试过了:

git reset --hard HEAD^
Run Code Online (Sandbox Code Playgroud)

但现在git status说我有不同的提交.我基本上想要擦除我在本地获得的任何东西,并在我的本地机器上获得准确的远程仓库.

git

31
推荐指数
2
解决办法
2万
查看次数

pull-only repo的'git status'表示分支领先于origin/master.为什么?

所以情况如下:

$ git status #On
branch master
#你的分支在[x]提交之前位于'origin/master'之前.
#

关于SO的问题已有几个问题,但似乎没有一个问题专门针对我所拥有的场景类型.其中一个问题的答案最接近,但没有详细说明.

我会直接引用它:

如果在执行"git pull remote branch"后收到此消息,请尝试使用"git fetch"进行跟进.

Fetch似乎更新了远程分支的本地表示,当你执行"git pull remote branch"时不一定会发生这种情况.

这个提示确实有效.但"不一定会发生吗?" 为什么不?我需要了解这一点.什么拉不做?

我不想接管这个问题,所以这是我的详细情景:

涉及三台电脑.我开发的Mac,git repo(即origin/master)所在的家庭服务器以及从该服务器获取的Webfaction帐户.

我提交并且git push origin master仅在Mac上提交.作为正常工作流程的一部分,在Webfaction上运行的唯一命令是git pull origin master(作为Fabric部署脚本的一部分).我不修改那里的代码.我是一个独立的开发者,所以其他任何人都没有.

我偶尔会登录Webfaction并检查一些事情,包括a git status.不可避免地,我总是得到"你的分支在前面......"的信息.跑步git fetch使消息消失.

我将要添加git fetch到Fabric脚本来完成这个问题,但我想知道为什么需要这样做,特别是在源/主的只拉式克隆上.虽然我每天都使用基本功能,但我并不熟悉Git,所以我们将非常感谢新手友好的解释.

按要求更新,相关位来自config:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = git@[server_address]:[path/to/repo.git]
[branch "master"]
    remote = origin
    merge = refs/heads/master
Run Code Online (Sandbox Code Playgroud)

git branch git-pull git-push git-fetch

10
推荐指数
3
解决办法
7304
查看次数

如果分支名称包含斜杠,git reset --hard 会失败

根据如何将我的本地存储库重置为就像远程存储库 HEAD 一样,您可以设置本地分支以匹配远程分支:

git reset --hard origin/<branch_name>
Run Code Online (Sandbox Code Playgroud)

这对于名称中没有斜杠的分支来说效果很好。

对于我的远程分支“topic/something”,使用命令

git reset --hard origin/topic/something
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

fatal: ambiguous argument 'origin/topic/something': unknown revision or path not in the working tree.
Run Code Online (Sandbox Code Playgroud)

包含斜杠的分支名称的正确语法是什么?谢谢。

git

8
推荐指数
1
解决办法
1326
查看次数

我想将当前的 Git 分支重置为 master 分支

我有开发分支和主分支,我的开发分支现在很混乱,我想重置它并将其作为我的主分支的副本。我不确定将 master 合并到开发中是否会使它们变得相同。尝试合并后,我遇到了很多冲突,我使用以下方法解决了它们:

git merge origin/master
git checkout 
Run Code Online (Sandbox Code Playgroud)

这足以让开发分支成为与 master 相同的副本吗

git repository

7
推荐指数
1
解决办法
1万
查看次数

Git:如何将我的本地分支恢复到远程分支状态?

我弄乱了项目的本地分支,我想将本地副本还原到远程状态.我如何完成那个简单的目标?

git

6
推荐指数
2
解决办法
7009
查看次数

如何避免拉动​​合并冲突?

我在本地保存了几个开源项目的存储库以供参考.我不经常更新它们,结果是我最终出现了合并冲突.说到Linux内核,这可能是数百个文件.

我如何告诉git从上游撤出并盲目接受所有变更?

git

6
推荐指数
1
解决办法
1007
查看次数

git:重置到远程分支

克隆存储库后,我无法将该存储库的状态重置为远程分支。

$ git clone <repo>
$ git reset --hard <upstream branch>
fatal: ambiguous argument '<upstream branch>': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]
Run Code Online (Sandbox Code Playgroud)

效果很好的方法是添加前缀origin

$ git reset --hard origin/<upstream branch>
Run Code Online (Sandbox Code Playgroud)

或之前结账

$ git checkout <upstream branch>
$ git reset --hard <upstream branch>
Run Code Online (Sandbox Code Playgroud)

问题:

  1. checkout 命令向本地 git 存储库提供哪些额外信息或状态更改,以便它最终可以重置其状态?
  2. 是否有一个命令(如 checkout)可以在重置命令之前运行,但不是特定于分支的?

git reset git-checkout

5
推荐指数
1
解决办法
7514
查看次数

如何删除所有本地提交并转到分支主服务器上的最后一个提交(在远程存储库上)?

我在存储库中进行了一些更改,并注册了一个提交(在本地)。然后我执行了这个:

$ git pull origin master
Run Code Online (Sandbox Code Playgroud)

我的本地提交与被拉的合并。现在我很后悔。我想获取远程分支主服务器上的最新版本,并获取本地提交(已合并)的信息。

我可以通过以下命令更改工作目录:

// the last commit on the remove branch master
$ git checkout 84acc42 .
Run Code Online (Sandbox Code Playgroud)

但是,如果我对其进行一些更改并将其推送,我想以前的更改仍然存在并且也将作为提交推送。因为该提交存在。

注意,$ git reset --hard这不会删除任何内容。我执行了该操作,但仍然看到了不需要的更改。

知道如何获取远程存储库(分支母版)上的最新版本并删除其他所有内容吗?我可以通过删除本地工作目录并从存储库中再次克隆来实现。但是我想知道是否还有另一种方法。

git github

5
推荐指数
1
解决办法
1570
查看次数

Git Pull Force 覆盖本地文件

Git Pull Force ”、“ git重置分支到原点”或者换句话说,拉出远程分支来覆盖本地分支,似乎是被广泛搜索的功能,尽管本地很少有下降,但人们对它的兴趣却越来越大。

\n

对于不断壮大的团队和不断增加的开发人员数量来说,这绝对有意义。

\n

显示的是来自 Google Trends 的图表,人们的兴趣越来越浓厚

\n

目前,最短的工作解决方案非常冗长并且需要分支知识

\n
git reset --hard origin/<branch_name>\n
Run Code Online (Sandbox Code Playgroud)\n
\n

编辑:有一个更方便的变体git reset --hard @{u}
\n请给予应有的评论。更多快捷方式在这里

\n
\n

不幸的是,因为输入以下内容要快得多

\n
git pull\n
Run Code Online (Sandbox Code Playgroud)\n

然而,这也带来了其自身的挑战。历史分歧、合并冲突等等……

\n
\n

我们确实有这样的简写

\n
git push origin HEAD -u --force\n
Run Code Online (Sandbox Code Playgroud)\n

它将本地分支推<branch_name>送到原点,覆盖同名的远程分支<branch_name>并将其设置为自己的上游分支。

\n

然而,没有这样的--force/ reset\xc2\xa0 替代git pull

\n
\n

将此功能添加到git 的最佳方式是什么?

\n
\n

如何强制“git pull”覆盖本地文件?6.6m 视图
\n将本地存储库分支重置为就像远程存储库 …

git

5
推荐指数
3
解决办法
2万
查看次数

标签 统计

git ×10

github ×2

branch ×1

git-checkout ×1

git-fetch ×1

git-pull ×1

git-push ×1

repository ×1

reset ×1