git - 你怎么把Git总是从一个特定的分支pull?

  显示原文与译文双语对照的内容

我不是一个git高手,但我已经使用了一段时间,有几个不同的项目。 在每个项目中,我总是 git clone [repository] 并且从那个点可以总是 git pull,只要我没有未完成的更改,当然。

最近,我不得不恢复到前一个分支,并使用 git checkout 4f82a29 。 当我再次准备拉的时候,我发现我必须把我的分支设置为主分支。 现在,我不能用直接的git pull 来拉,而必须指定 git pull origin master 这很烦人,并且告诉我,我并不完全理解。

改动的功能,它不允许我做我一条真正掌握 git pull 而不指定原点,如何改回来?

更新:


-bash-3.1$ cat config
[core]
 repositoryformatversion = 0
 filemode = true
 bare = false
 logallrefupdates = true
[branch"master"]
[remote"origin"]
 url = git@github.com:user/project.git
 fetch = refs/heads/*:refs/remotes/origin/*

更新 2: 要清楚,我明白我的原始方法可能是不正确的,但是我需要修复这个存储库,以便我可以再次使用 git pull 。 目前,git pull的结果是:


-bash-3.1$ git pull
You asked me to pull without telling me which branch you
want to merge with, and 'branch.master.merge' in
your configuration file does not tell me either. Please
name which branch you want to merge on the command line and
try again (e.g. 'git pull ').
See git-pull(1) for details on the refspec.

If you often merge with the same branch, you may want to
configure the following variables in your configuration
file:

 branch.master.remote = 
 branch.master.merge = 
 remote..url = 
 remote..fetch = 

See git-config(1) for details.

我可以告诉 git pull 要合并哪个分支,它可以正常工作,但是 git pull 不能像原来的git checkout 那样工作。

时间:

[branch"master"] 下,尝试将以下内容添加到仓库配置文件( .git/config )的Git:


[branch"master"]
 remote = origin
 merge = refs/heads/master

这将告诉 Git 2:

  1. 当你位于主分支上时,默认的远程是原始的。
  2. 当在主分支上使用 git pull 时,没有指定远程和分支,请在主分支的更改中使用默认远程( 原点) 和合并。

我不知道为什么这个安装程序会从你的配置中删除,尽管。 你可能还需要遵循其他人已经发布的建议,但这可能是( 或者至少帮助) 。

如果你不想手工编辑配置文件,你可以使用command-line工具:


$ git config branch.master.remote origin
$ git config branch.master.merge refs/heads/master

如果愿意,你可以通过commmand行( 而不是编辑配置文件) 设置这些选项,如下所示:


 $ git config branch.master.remote origin
 $ git config branch.master.merge refs/heads/master

或者,如果你像我一样,希望在你的所有项目中都是默认的,包括将来可以处理的项目,那么将它作为全局配置设置添加:


 $ git config --global branch.master.remote origin
 $ git config --global branch.master.merge refs/heads/master


git branch --set-upstream master origin/master

这将向你的config file: 添加以下信息


[branch"master"]
 remote = origin
 merge = refs/heads/master

如果你有 branch.autosetuprebase = always,那么它也会添加:


 rebase = true

git pull --正在获取新邮件合并两个操作提交从远程存储库中跟踪分支中的然后它们合并进 你当前的分支。

当你签出一个特定的提交时,你没有当前分支,你只有指向上次提交的头。 所以 git pull 没有指定所有参数。 这就是为什么它不能工作。

根据你的更新信息,你正试图恢复远程仓库。 如果你知道引入 Bug的提交,处理这个问题最简单的方法是使用 git revert 记录一个新提交,该提交撤消指定的提交提交:


$ git checkout master
$ git reflog #to find the SHA1 of buggy commit, say b12345
$ git revert b12345
$ git pull
$ git push

因为你想要改变的是你的服务器,我假设你不需要重写历史来隐藏那些有bug的提交。

如果在合并提交中引入了 Bug,那么这个过程将不起作用。 参见 How-to-revert-a-faulty-merge web 。

我发现自己很难记得具体的git config 或者 git branch 凯西的参数作为它的内部及mipadi的答案,所以我使用这些 2命令可以添加上游引用:


git pull origin master
git push -u origin master

这将向你的。git/config添加相同的信息,但我发现记住它更容易。

你的直接问题是如何让它吸引大师,你需要做的就是。 指定要从分支配置中提取的refspec 。


[branch"master"]
 merge = refs/heads/master

还有一种配置Git的方法,它总是把等价的远程分支拉放到当前签出到工作副本的分支。 这叫一个追踪分支该 git设置默认情况下 建议做好准备。

对于当前工作目录之上的下一个储存库:


git config branch.autosetupmerge true

对于所有的Git仓库,没有配置:


git config --global branch.autosetupmerge true

种法术,恕我直言,但这样可能提高 特定分支的位置一般来说是总是当前的分支 。

当你将 branch.autosetupmerge 设置为 true 并首次签出分支时,Git将告诉你跟踪相应的远程分支:


(master)$ git checkout gh-pages
Branch gh-pages set up to track remote branch gh-pages from origin.
Switched to a new branch 'gh-pages'

然后Git将自动推送到相应的分支:


(gh-pages)$ git push
Counting objects: 8, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 1003 bytes, done.
Total 6 (delta 2), reused 0 (delta 0)
To git@github.com:bigben87/webbit.git
 1bf578c..268fb60 gh-pages -> gh-pages

...