4

我从我的项目中签出特定提交并从那里继续,希望在该提交之后的更改将被删除,并且我签出的提交将是新的负责人。我提交了新的更改,但我无法推送它们。我还是 git 的新手。

我所做的是:

  1. git checkout commit_hash
  2. 编辑项目
  3. git commit -m "新变化"
  4. git push -u 起源大师

我有:

To https://github.com/myusername/project.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://github.com/miloradsimic/ISA16.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

当我输入git status我得到:

HEAD 与 506f0ec 分离
没有什么可提交的,工作目录干净

我在头部提交中更改了项目层次结构,因此我想将其恢复到以前的状态。我不想将它与头部合并。

我是这样做的(简单的方法,不专业): 我在一个文件夹中有更改的项目,而不是放在头上。我将 head commit 下载到新文件夹中,并从文件夹中复制了所有文件(git 文件除外)以及我对该文件夹的更改。删除了不必要的文件。添加所有更改,提交和推送。

谢谢,米洛拉德析米克

4

2 回答 2

7

当我们签出到一个提交哈希时,我们不再在一个分支上detached HEAD)。

HEAD 与 506f0ec 分离

要解决它,只需创建一个新分支、进行更改、执行新提交、推送到远程。

签出到提交哈希。

$ git checkout <commit-hash>

您可以在此处进行更改/提交,并稍后在推送到远程之前创建一个新分支(您的情况在这里)。但我更喜欢先创建一个新分支(比如dev)。

$ git checkout -b dev
// do changes here

$ git add .
$ git commit -m 'message'
$ git push -u origin HEAD       # push to remote/dev

将分支合并devmaster分支:

您需要merge dev branch进入master分支才能获得新的更改。

$ git checkout master
$ git pull origin dev      # pull 'dev' new changes into 'master', pull = fetch + merge

$ git push origin HEAD     # update origin/master

master用分支替换dev分支

如果你想master用分支的变化来重置,那么用分支dev替换。 masterdev

$ git checkout dev
$ git branch -D master      # delete local master branch

$ git checkout -b master    # create new local/master branch with exactly 'dev's' history
$ git push -f origin HEAD   # force(-f) push to remote since git history is changed

注意:现在masterdev有相同的提交/更改。

于 2017-02-28T09:49:32.407 回答
-1

你可以做git reset --hard <commit-id>

然后进行更改/提交。

干杯

于 2017-02-28T11:29:23.360 回答