基本上,我有一个我想要修复的开放拉取请求,同时我想将包含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仓库与远程仓库完全相同?
我试过了:
git reset --hard HEAD^
Run Code Online (Sandbox Code Playgroud)
但现在git status说我有不同的提交.我基本上想要擦除我在本地获得的任何东西,并在我的本地机器上获得准确的远程仓库.
所以情况如下:
$ 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) 根据如何将我的本地存储库重置为就像远程存储库 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)
包含斜杠的分支名称的正确语法是什么?谢谢。
我有开发分支和主分支,我的开发分支现在很混乱,我想重置它并将其作为我的主分支的副本。我不确定将 master 合并到开发中是否会使它们变得相同。尝试合并后,我遇到了很多冲突,我使用以下方法解决了它们:
git merge origin/master
git checkout
Run Code Online (Sandbox Code Playgroud)
这足以让开发分支成为与 master 相同的副本吗
我在本地保存了几个开源项目的存储库以供参考.我不经常更新它们,结果是我最终出现了合并冲突.说到Linux内核,这可能是数百个文件.
我如何告诉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)
问题:
我在存储库中进行了一些更改,并注册了一个提交(在本地)。然后我执行了这个:
$ 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 Pull Force ”、“ git重置分支到原点”或者换句话说,拉出远程分支来覆盖本地分支,似乎是被广泛搜索的功能,尽管本地很少有下降,但人们对它的兴趣却越来越大。
\n对于不断壮大的团队和不断增加的开发人员数量来说,这绝对有意义。
\n\n目前,最短的工作解决方案非常冗长并且需要分支知识
\ngit reset --hard origin/<branch_name>\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n
不幸的是,因为输入以下内容要快得多
\ngit pull\nRun Code Online (Sandbox Code Playgroud)\n然而,这也带来了其自身的挑战。历史分歧、合并冲突等等……
\n我们确实有这样的简写
\ngit push origin HEAD -u --force\nRun Code Online (Sandbox Code Playgroud)\n它将本地分支推<branch_name>送到原点,覆盖同名的远程分支<branch_name>并将其设置为自己的上游分支。
然而,没有这样的--force/ reset\xc2\xa0 替代git pull。
将此功能添加到git 的最佳方式是什么?
\ngit ×10
github ×2
branch ×1
git-checkout ×1
git-fetch ×1
git-pull ×1
git-push ×1
repository ×1
reset ×1