考虑以下内容,我在github上有两个分支:master和dev。我有一个本地存储库,它是克隆并指向远程主服务器,但我想将其切换到dev分支,以便我所做的任何更改都将提交给dev而不是master。这样做需要采取哪些步骤?我尝试了多种方法,但它们似乎从不工作,它总是承诺掌握。请简单解释一下,因为我还是Git和libgit2sharp的新手,所以我仍然试图绕过它。
编辑:我正在使用libgit2sharp库发出git命令,而不是Git shell
答案 0 :(得分:4)
如果您还没有名为dev
的本地分支,但您的远程 有dev
分支,那么运行git checkout dev
将创建一个新分支dev
在本地分支,设置远程跟踪信息,然后切换到新创建的分支。您可以在LibGit2Sharp中模拟此行为。
要创建跟踪远程dev
分支(dev
)的本地分支refs/remotes/origin/dev
,请先找到远程分支:
Branch trackedBranch = repo.Branches["origin/dev"];
然后创建一个名为dev
的新本地分支,指向与origin/dev
分支相同的提交:
Branch localBranch = repo.CreateBranch("dev", trackedBranch.Tip);
然后在本地和远程分支之间设置跟踪:
repo.Branches.Update(localBranch, b => b.UpstreamBranch = "refs/heads/dev");
最后,切换到新分支:
LibGit2Sharp.Commands.Checkout(repo, "dev");
答案 1 :(得分:1)
如果你的dev分支存在,那么:
git checkout dev
如果您的dev分支尚不存在,那么您需要创建它,然后切换到它:
git checkout -b dev
使用libgit2sharp,无法执行git checkout -b
(我知道),因此您需要使用CreateBranch
创建一个分支,然后Checkout
执行分支结帐。
代码如下所示:
private void GetOrCreateThenCheckoutBranch(string myPath, string branchName)
{
// NOTE: This code is for demo purposes only. It is a bad idea
// to create code that couples multiple functions/actions together
using (var repo = new Repository("path/to/your/repo"))
{
var devBranch = repo.Branches["dev"];
if (branch == null)
{
// Repository returns null object when branch does not exist
// so, create a new, LOCAL branch
repo.CreateBranch("dev"); // Or repo.Branches.Add("dev", "HEAD");
devBranch = repo.Branches["dev"];
// You will need more code _here_ if you want to synchronize/set
// an upstream branch...
}
// Now, checkout the branch
Branch currentBranch = Commands.Checkout(repo , devBranch);
// Do more stuff...
}
Git是一个分布式版本控制系统。进行更改时,您将在存储库的本地副本中对分支进行更改。在本地进行更改后,您将需要
如果远程分支机构不允许任何人进行合并,则需要发出pull request。