1、克隆远程分支
git clone默认会把远程仓库整个给clone下来,但只会默认创建一个master分支,如果有其他分支,可以使用git branch -a查看所有分支。
然后使用git checkout -t 加分支名,它默认会在本地建立一个和远程分支名字一样的分支。
2、合并分支的部分文件
#branch feature
git commit -a -m "msg"
git checkout master
#branch master
git checkout feature file-01
git checkout feature file-x
...
git commit -a -m "msg"
3、对比两个分支
git diff [branchA] [branchB]
可重定向到一个文件中
git diff [branchA] [branchB] >> diff.diff
$ git pull <远程主机名> <远程分支名>:<本地分支名>
$ git push <远程主机名> <本地分支名>:<远程分支名>
--------------------------------------------------------------------
Git如何进行分支管理?
1、创建分支
创建分支很简单:git branch <分支名>
2、切换分支
git checkout <分支名>
该语句和上一个语句可以和起来用一个语句表示:git checkout -b <分支名>
3、分支合并
比如,如果要将开发中的分支(develop),合并到稳定分支(master),
首先切换的master分支:git checkout master。
然后执行合并操作:git merge develop。
如果有冲突,会提示你,调用git status查看冲突文件。
解决冲突,然后调用git add或git rm将解决后的文件暂存。
所有冲突解决后,git commit 提交更改。
4、分支衍合
分支衍合和分支合并的差别在于,分支衍合不会保留合并的日志,不留痕迹,而 分支合并则会保留合并的日志。
要将开发中的分支(develop),衍合到稳定分支(master)。
首先切换的master分支:git checkout master。
然后执行衍和操作:git rebase develop。
如果有冲突,会提示你,调用git status查看冲突文件。
解决冲突,然后调用git add或git rm将解决后的文件暂存。
所有冲突解决后,git rebase --continue 提交更改。
5、删除分支
执行git branch -d <分支名>
如果该分支没有合并到主分支会报错,可以用以下命令强制删除git branch -D <分支名>
---------------------------------------------------------------------------------------------------
git fetch:相当于是从远程获取最新版本到本地,不会自动merge
git fetch origin master
git log -p master..origin/master
git merge origin/master
以上命令的含义:
首先从远程的origin的master主分支下载最新的版本到origin/master分支上
然后比较本地的master分支和origin/master分支的差别
最后进行合并
上述过程其实可以用以下更清晰的方式来进行:
git fetch origin master:tmp
git diff tmp
git merge tmp
从远程获取最新的版本到本地的test分支上
之后再进行比较合并
2. git pull:相当于是从远程获取最新版本并merge到本地
git pull origin master
上述命令其实相当于git fetch 和 git merge
在实际使用中,git fetch更安全一些
因为在merge前,我们可以查看更新情况,然后再决定是否合并
结束
---------------------------------------------------
git remote add origin ssh:rocky@192.168.2.236:/opt/work3/rocky/avn-d100
如果想把本地的某个分支test提交到远程仓库,并作为远程仓库的master分支,或者作为另外一个名叫test的分支,那么可以这么做。
$ git push origin test:master // 提交本地test分支作为远程的master分支
$ git push origin test:test // 提交本地test分支作为远程的test分支
如果想删除远程的分支呢?类似于上面,如果:左边的分支为空,那么将删除:右边的远程的分支。
$ git push origin :test // 刚提交到远程的test将被删除,但是本地还会保存的,不用担心
---------------------------------------------------
在使用Git Push代码到数据仓库时,提示如下错误:
[remote rejected] master -> master (branch is currently checked out)
remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require 'git reset --hard' to match
remote: error: the work tree to HEAD.
remote: error:
这是由于git默认拒绝了push操作,需要进行设置,修改.git/config添加如下代码:
[receive]
denyCurrentBranch = ignore
在初始化远程仓库时最好使用 git --bare init 而不要使用:git init
如果使用了git init初始化,则远程仓库的目录下,也包含work tree,当本地仓库向远程仓库push时, 如果远程仓库正在push的分支上(如果当时不在push的分支,就没有问题), 那么push后的结果不会反应在work tree上, 也即在远程仓库的目录下对应的文件还是之前的内容,必须得使用git reset --hard才能看到push后的内容.
===============================
从远程仓库clone下来后,再作为本地仓库使用步骤:
1、sudo apt-get install openssh-server
2、如果是root,修改配置,让root可登陆。
vi /etc/ssh/sshd_config 将PermitRootLogin值改yes。
3、/etc/init.d/ssh restart
4、在clone下来的目录中git --bare init
(如果目录下原先没有.git目录,则还需执行git init)
在.git/config中添加
[receive]
denyCurrentBranch = ignore
5、在另外的终端使用git clone ssh://192.168.70.225::/opt/workspace/cpgw/.git
错误1:remote: error: insufficient permission for adding an object to repository database objects
解决方法:
在服务器端更改使用git用户的用户组为git用户组:usermod -a -G 用户组 用户名
改变代码仓库下,所有文件的访问权限,同组可写 sudo chmod -R g+ws [仓库目录]
更改仓库的用户组:sudo chgrp -R git [仓库目录]