我正在试着理解git中的分支。我已经使用SVN,所以试图获取目录结构
我用
创建一个git主回购mkdir git_repo
cd git_repo
git init --bare
cd ../
git clone git_repo new_clone
cd new_clone
touch test.txt
git add test.txt
git commit test.txt
git push origin master
//So now the contents are in git_repo
git branch new_branch
git branch
/*master
*new_branch is the output */
git checkout new_branch
//Switched to branch 'new'
我的问题是
1.如何切换回new_clone
2.如何将文件从分支推送到new_repo
3.如何在new_branch和new_clone
中看到文件中的差异4.如何将文件推送到git_repo
5.我在这种情况下使用合并
6.如何单独列出new_branch和new_clone中的文件
任何人都可以用例子来解释这些。
谢谢..
答案 0 :(得分:0)
new_clone
”,因为new_clone
不是分支。您有一个包含两个分支的存储库,名为master
和new_branch
。 “切换到[存储库路径]”是什么意思?git_repo
的提交到我的工作副本?”答案是您执行new_clone
检索更改,git fetch
或git merge
将其合并到本地(或git rebase
在一次操作中执行这两项操作)。git pull
。对于特定文件git diff new_branch new_clone
。对于变更集方面的差异,而不是补丁格式,请使用git diff new_branch:path/to/file new_clone:path/to/file
等。git log --oneline --left-right new_clone...new_branch
,正如您已经做过的那样。答案 1 :(得分:0)
GIT与SVN不同 - 它是一个分布式版本控制系统。不要把它想象成具有服务器和多个客户端的SVN,而是以对等的方式来考虑它。
让我先回答你的问题:
转回:
没有问题切换回new_clone - new_clone是一个存储库而不是分支,分支是master和new_branch,由git branch
列出。如果您想切换到master(原始分支),请使用:git checkout master
或一般git checkout <branch-name>
。
您可以使用git push origin new_branch
将分支推送到原点。
如(1)所述,没有new_clone
分支。使用此:git diff new_branch master
见(2)
在这种情况下,您不使用合并。但是,假设您有2个工作副本,并且您希望在它们之间共享代码,您可以使用git merge将更改从一个副本合并到另一个副本。
让我们看一下完整版,以帮助您理解所有概念。 Alice和Bob是2个使用GIT的用户(同行):
创建2个用户Alice和Bob
sudo adduser alice
sudo adduser bob
以Alice身份登录并配置
su alice
git config --global user.name "Alice"
git config --global user.email alice@example.com
以Bob身份登录并配置
su bob
git config --global user.name "Bob"
git config --global user.email bob@example.com
Alice创建了一个GIT存储库
mkdir project
cd project/
git init
echo "Some text" > test
git add test
git commit -m "Adding test"
git status
Bob克隆它,编辑并提交更改
cd ~
git clone /home/alice/project myclone
cd myclone/
git log # See the changes from Alice
echo "Some text - edited by Bob" > test
git commit -m "Making changes to test" -a
git diff
Alice合并来自bob的更改
git remote add bob /home/bob/myclone
git fetch bob
git branch -a # To list
git log -p master..bob/master
git merge --no-ff bob/master # Merge changes from Bob
Alice在实验分支上进行更改,然后提交它:
git branch experimental
git branch # To list
git checkout experimental
git branch # To list
echo "Some text - edited by Bob, further edited by Alice" > test
git commit -m "Further modifying test" -a
git checkout master
git log -p master..experimental
git merge --no-ff experimental
git branch -d experimental # To delete the branch
鲍勃提出了改变:
git pull
请注意,此处没有中央服务器,Alice和Bob是同行。
此处有更多详情: