博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS之github、oschina、bitboucket使用(二)
阅读量:4290 次
发布时间:2019-05-27

本文共 28333 字,大约阅读时间需要 94 分钟。

git常用命令:

廖雪峰:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375234012342f90be1fc4d81446c967bbdc19e7c03d3000

git官网:https://git-scm.com

===========github使用=========

参考:http://www.runoob.com/w3cnote/git-guide.html

1.在github上注册账号,填写相关信息(bitbucket\码云一样操作)

 

1. 检查SSH keys是否存在输入下面的命令,如果有文件id_rsa.pub 或 id_dsa.pub,则直接进入步骤3将SSH key添加到GitHub中,否则进入第二步生成SSH keyls -al ~/.ssh# Lists the files in your .ssh directory, if they exist2. 生成新的ssh key第一步:生成public/private rsa key pair在命令行中输入ssh-keygen -t rsa -C "your_email@example.com"默认会在相应路径下(/your_home_path)生成id_rsa和id_rsa.pub两个文件,如下面代码所示ssh-keygen -t rsa -C "your_email@example.com"# Creates a new ssh key using the provided emailGenerating public/private rsa key pair.Enter file in which to save the key (/your_home_path/.ssh/id_rsa):第二步:输入passphrase(本步骤可以跳过)设置passphrase后,进行版本控制时,每次与GitHub通信都会要求输入passphrase,以避免某些“失误”Enter passphrase (empty for no passphrase): [Type a passphrase]Enter same passphrase again: [Type passphrase again]sample result:Your identification has been saved in /your_home_path/.ssh/id_rsa.Your public key has been saved in /your_home_path/.ssh/id_rsa.pub.The key fingerprint is:#01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db your_email@example.com第三步:将新生成的key添加到ssh-agent中:# start the ssh-agent in the backgroundeval "$(ssh-agent -s)"Agent pid 59566ssh-add ~/.ssh/id_rsa3. 将ssh key添加到GitHub中用自己喜欢的文本编辑器打开id_rsa.pub文件,里面的信息即为SSH key,将这些信息复制到GitHub的Add SSH key页面即可不同的操作系统,均有一些命令,直接将SSH key从文件拷贝到粘贴板中,如下:macpbcopy < ~/.ssh/id_rsa.pub# Copies the contents of the id_rsa.pub file to your clipboardwindowsclip < ~/.ssh/id_rsa.pub# Copies the contents of the id_rsa.pub file to your clipboardlinuxsudo apt-get install xclip# Downloads and installs xclip. If you don't have `apt-get`, you might need to use another installer (like `yum`)xclip -sel clip < ~/.ssh/id_rsa.pub# Copies the contents of the id_rsa.pub file to your clipboard

 

 

 

 

在终端中写入:ssh-keygen -t rsa -C“****@gmail.com”

 

后面的****@gmail.com改为你在github上注册的邮箱,之后会要求确认路径和输入密码,我们这使用默认的一路回车就行。成功的话会在~/下生成.ssh文件夹,进去,打开id_rsa.pub,复制里面的key。

回到github上,进入 Account Settings(账户配置),左边选择SSH Keys,Add SSH Key,title随便填,粘贴在你电脑上生成的key。

 

 查看你的 public key,并把他添加到码云(Gitee.com) SSH key添加地址:https://gitee.com/profile/sshkeys)

 

cat ~/.ssh/id_rsa.pub

# ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6eNtGpNGwstc....

添加后,在终端(Terminal)中输入ssh -T git@gitee.com

若返回Welcome to Gitee.com, yourname!

 

 

 

不同的平台,一定更要检查对应平台账号的邮箱

码云文档:http://git.mydoc.io/?t=154712

使用码云和使用GitHub类似,我们在码云上注册账号并登录后,需要先上传自己的SSH公钥。选择右上角用户头像 -> 菜单“修改资料”,然后选择“SSH公钥”,填写一个便于识别的标题,然后把用户主目录下的.ssh/id_rsa.pub文件的内容粘贴进去:

 

============码云======本地仓库同时和多个线上仓库关联:

码云官网:

码云帮助:

 

 

首先,你需要执行下面两条命令,作为 git 的基础配置,作用是告诉 git 你是谁,你输入的信息将出现在你创建的提交中。

 

git config --global user.name "你的码云昵称"

git config --global user.email "你的邮箱"

 

Mac上:cd ~/workspace/my_site/

 

在Windows上:

 

cd c:\workspace\my_site

 

******我们首先需要告诉Git这个文件夹是我们需要跟踪的项目。所以我们发送这个命令来初始化一个新的本地Git代码库,本地初始化一个项目

git init

Git会在my_site文件夹内创建一个名为.git的隐藏文件夹,那就是你的本地代码库。

 

**第一次吧代码推送到远程仓库(建立连接) git remote add origin <你的项目地址> //注:项目地址形式为:https://gitee.com/xxx/xxx.git或者 git@gitee.com:xxx/xxx.git

 

然后在你的需要初始化版本库的文件夹中执行:

我们在本地库上使用命令git remote add把它和码云的远程库关联:

git remote add origin git@gitee.com:liaoxuefeng/learngit.git

之后,就可以正常地用git push和git pull推送了!

 

如果没有提示说明成功了;如果在使用命令git remote add时报错:

git remote add origin git@gitee.com:liaoxuefeng/learngit.git

fatal: remote origin already exists.

这说明本地库已经关联了一个名叫origin的远程库,此时,可以先用git remote -v查看远程库信息:

 

git remote -v

origin    git@github.com:michaelliao/learngit.git (fetch)

origin    git@github.com:michaelliao/learngit.git (push)

可以看到,本地库已经关联了origin的远程库,并且,该远程库指向GitHub。

 

我们可以删除已有的GitHub远程库:

git remote rm origin

再关联码云的远程库(注意路径中需要填写正确的用户名):

 

git remote add origin git@gitee.com:liaoxuefeng/learngit.git

此时,我们再查看远程库信息:

 

git remote -v

origin    git@gitee.com:liaoxuefeng/learngit.git (fetch)

origin    git@gitee.com:liaoxuefeng/learngit.git (push)

现在可以看到,origin已经被关联到码云的远程库了。通过git push命令就可以把本地库推送到Gitee上。

(如果没有上面的关联远程仓库的操作:也可以用下面的:

git pull --rebase origin master   将本地代码与远程仓库代码合并

git push -u origin master         上传合并后的代码(第一次上传使用"-u"进行本地和远程关联,以后不用)

工作区(Working Directory):就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区:

版本库(Repository):工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:

第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别;

 

 

如果你想克隆一个项目,只需要执行:

git clone <项目地址>

******完成第一次提交

进入你已经初始化好的或者克隆项目的目录,然后执行(从线上拉取主分支master下来到本地):

git pull origin master

<这里需要修改/添加文件,否则与原文件相比就没有变动>

//一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

git add .

//二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支本地仓库

git commit -m "第一次提交到本地仓库"

//推送到远程仓库

git push origin master    

然后如果需要账号密码的话就输入账号密码,这样就完成了一次提交。

 

此时,你可以在你的个人面板、项目主页查看到你的提交记录,例如:http://git.oschina.net/oschina/git-osc/commit/f3dd1c5bae48fa4244e2595a39e750e5606dd9be](http://git.oschina.net/oschina/git-osc/commit/f3dd1c5bae48fa4244e2595a39e750e5606dd9be

 

按照本文档新建的项目时,在码云平台仓库上已经存在 readme 文件,故在提交时可能会存在冲突,这时您需要选择的是保留线上的文件或者舍弃线上的文件,如果您舍弃线上的文件,则在推送时选择强制推送,强制推送需要执行下面的命令:

 

git push origin master -f

如果您选择保留线上的 readme 文件,则需要先执行:

 

git pull origin master

然后才可以推送,如果发生冲突,则需要先解决冲突

码云冲突解决:http://git.mydoc.io/?t=83148

码云版本回退:http://git.mydoc.io/?t=154703

码云分支合并:http://git.mydoc.io/?t=83150

分支的原理和操作:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375840038939c291467cc7c747b1810aab2fb8863508000

 

分支策略

查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>

创建+切换分支:git checkout -b <name>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

删除码云上的分支  git push --delete origin <name>

 

在实际开发中,我们应该按照几个基本原则进行分支管理:

首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;

那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。

所以,团队合作的分支看起来就像这样:

git-br-policy

 

 

 

先,我们创建dev分支,然后切换到dev分支:git checkout -b dev

 终端提示:  Switched to a new branch 'dev'

 

git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

 git branch dev

 git checkout dev

终端提示:Switched to branch 'dev'

然后,用git branch命令查看当前分支:git branch

终端提示:* dev

master

git branch命令会列出所有分支,当前分支前面会标一个*号

把分支one和远程仓库建立连接:

git remote add one git@gitee.com:liaoxuefeng/learngit.git

然后,我们就可以在dev分支上正常提交,比如对readme.txt做个修改,加上一行:

Creating a new branch is quick.

然后提交:

 git add readme.txt

 git commit -m "branch test"

终端提示:[dev fec145a] branch test

1 file changed, 1 insertion(+)

现在,dev分支的工作完成,我们就可以切换回master分支:git checkout master

终端提示:Switched to branch 'master'

*****git push origin dev  //推送到dev分支到远程仓库,此时到码云上可以看到,有了mybranch分支,并且该下面有东西了;

 

切换回master分支后,再查看一个readme.txt文件,刚才添加的内容不见了!因为那个提交是在dev分支上,而master分支此刻的提交点并没有变:

现在,我们把dev分支的工作成果合并到master分支上:

 git merge dev

终端提示:Updating d17efd8..fec145a

Fast-forward

readme.txt |    1 +

1 file changed, 1 insertion(+)

 

git merge命令用于合并指定分支当前分支。合并后,再查看readme.txt的内容,就可以看到,和dev分支的最新提交是完全一样的。

注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。

当然,也不是每次合并都能Fast-forward;

通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。

如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward:

 git merge --no-ff -m "merge with no-ff" dev

终端提示:Merge made by the 'recursive' strategy.

readme.txt |    1 +

1 file changed, 1 insertion(+)

因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。

 

合并后,我们用git log看看分支历史:

 

git log --graph --pretty=oneline --abbrev-commit

*   7825a50 merge with no-ff

|\

| * 6224937 add merge

|/

*   59bc1cb conflict fixed

合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

合并完成后,就可以放心地删除dev分支了:

 git branch -d dev

终端提示:Deleted branch dev (was fec145a).

删除后,查看branch,就只剩下master分支了:git branch

终端提示(*号表示当前分支):* master

因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。

====抓取分支=========

当你的小伙伴从远程库clone时,默认情况下,你的小伙伴只能看到本地的master分支。用git branch命令看看:

git branch

终端提示:* master

现在,你的小伙伴要在dev分支上开发,就必须创建远程origin的dev分支到本地,于是他用这个命令创建本地dev分支:

git checkout -b dev origin/dev

现在,他就可以在dev上继续修改,然后,时不时地把dev分支push到远程:

git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别:

用命令git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区

命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

 

一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

 

一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

 

总之,就是让这个文件回到最近一次git commit或git add时的状态

git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令。

********版本回退===

先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

现在,我们要把当前版本“append GPL”回退到上一个版本“add distributed”,就可以使用git reset命令:

$ git reset --hard HEAD^

HEAD is now at ea34578 add distributed

$ git reset --hard 3628164

HEAD is now at 3628164 a

版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。

 

Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向a:

总结一下:

HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。

穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

==========打tag标签======

在Git中打标签非常简单,首先,切换到需要打标签的分支上:

 git branch

终端提示:* dev

master

 git checkout master

终端提示:Switched to branch 'master'

然后,敲命令git tag <name>就可以打一个新标签:

 git tag v1.0

可以用命令git tag查看所有标签:

 git tag

终端提示:v1.0

默认标签是打在最新提交的commit上的

如果要在历史的提交上打标签,找到历史提交的commit id,然后打上就可以

查找历史提交:

git log --pretty=oneline --abbrev-commit

例如:

commit id6224937,敲入命令:

 git tag v0.9 6224937

 

标签不是按时间顺序列出,而是按字母排序的。可以用git show <tagname>查看标签信息:

 git show v0.9

还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字:

 git tag -a v0.1 -m "version 0.1 released" 3628164

还可以通过-s用私钥签名一个标签:

git tag -s v0.2 -m "signed version 0.2 released" fec145a

签名采用PGP签名,因此,必须首先安装gpg(GnuPG),如果没有找到gpg,或者没有gpg密钥对,就会报错:

gpg: signing failed: secret key not available

error: gpg failed to sign the data

error: unable to sign the tag

如果报错,请参考GnuPG帮助文档配置Key。

如果标签打错了,也可以删除:

git tag -d v0.1

因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除;

如果要推送某个标签到远程,使用命令git push origin <tagname>:

git push origin v1.0

终端提示:Total 0 (delta 0), reused 0 (delta 0)

To git@github.com:michaelliao/learngit.git

* [new tag]         v1.0 -> v1.0

一次性推送全部尚未推送到远程的本地标签:

git push origin --tags

终端提示:Counting objects: 1, done.

Writing objects: 100% (1/1), 554 bytes, done.

Total 1 (delta 0), reused 0 (delta 0)

To git@github.com:michaelliao/learngit.git

* [new tag]         v0.2 -> v0.2

* [new tag]         v0.9 -> v0.9

如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:

git tag -d v0.9

终端提示:Deleted tag 'v0.9' (was 6224937)

然后,从远程删除。删除命令也是push,但是格式如下:

git push origin :refs/tags/v0.9

终端提示:To git@github.com:michaelliao/learngit.git

- [deleted]         v0.9

=================一个本地库能不能既关联GitHub,又关联码云呢?

答案是肯定的,因为git本身是分布式版本控制系统,可以同步到另外一个远程库,当然也可以同步到另外两个远程库。

使用多个远程库时,我们要注意,git给远程库起的默认名称是origin,如果有多个远程库,我们需要用不同的名称来标识不同的远程库。

仍然以learngit本地库为例,我们先删除已关联的名为origin的远程库:

git remote rm origin

然后,先关联GitHub的远程库:

git remote add github git@github.com:michaelliao/learngit.git

注意,远程库的名称叫github,不叫origin了。

接着,再关联码云的远程库:

git remote add gitee git@gitee.com:liaoxuefeng/learngit.git

同样注意,远程库的名称叫gitee,不叫origin。

现在,我们用git remote -v查看远程库信息,可以看到两个远程库:

git remote -v

gitee    git@gitee.com:liaoxuefeng/learngit.git (fetch)

gitee    git@gitee.com:liaoxuefeng/learngit.git (push)

github    git@github.com:michaelliao/learngit.git (fetch)

github    git@github.com:michaelliao/learngit.git (push)

如果要推送到GitHub,使用命令:

git push github master

如果要推送到码云,使用命令:

git push gitee master

这样一来,我们的本地库就可以同时与多个远程库互相同步:

 

multi-remote

 

 

=========撤销修改=========

1.丢弃工作区的修改(还没有git add到暂存区)git checkout -- readme.txt

就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令。

git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

2.丢弃暂区的修改(已经git add到暂存区):用命令git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区;git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。

=========删除文件=========

git rm test.txt

命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容

============bitboucket的使用============

参考:http://www.cnblogs.com/chjw8016/archive/2012/11/08/2760286.html

https://confluence.atlassian.com/bitbucket/push-versioned-code-to-an-empty-repository-877177145.html

 

使用密码登录,每次都必须输入密码,非常麻烦。好在SSH还提供了公钥登录,可以省去输入密码的步骤所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。这种方法要求用户必须提供自己的公钥。如果没有现成的,可以直接用ssh-keygen生成一个

我们打开Git Bash,然后输入:

ssh -keygen

提示让你输入密钥的地址与名字,默认是 ~/.ssh/id_rsa,这里我们使用~/.ssh/bitbucket_id_rsa,一路回车得到两个文件(期间会让你输入passphass用来加密私钥,这里为简单起见就为空,所以直接回车):

安装Git

在大多数*nix系统(Linux、OS X)上,Git已经被安装了。你通过发送下面的命令,可以通过Git自身,把它更新到最新的的开发版本(不推荐)。

git clone https://github.com/git/git

在Windows上,你可以在这里下载Git的安装程序。如果你真的需要其他系统的安装程序,Mac OS X安装文件在这里,Linux的操作指导在这里。

-=============创建一个远程代码库

很多人喜欢用Github。我个人更喜欢BitBucket,因为它提供了不限制的私有代码库,那是我最需要的。你可以将下列指令转换到Github上,这些过程是相同的。

那么,去到www.bitbucket.org并注册一个账号。一旦完成,登录后点击最上方的“create(创建)”按钮。照着填写表格,勾选私有代码库。你可不想让其他人来偷窥你的Facebook的杀手级应用的源代码,对吧。

你现在可以离开BitBucket了,我们在已经有了所有那里需要的东西了。

设置Git

在我们能用Git工作之前,我们需要做个一次性的配置。为了Git能跟踪到谁做了修改,我们需要设置你的用户名。我强烈建议你使用与注册BitBucket账号相同的用户名和电子邮箱地址。发送这些命令,相应地替换掉其中的“your_username”和“your_email@domain.com”(注意引号)

git config --global user.name "Your Name"

git config --global user.email "email@example.com"

我们也会设定推送(push)的默认值为‘simple’。要了解这是什么意思,快速阅读我之前发布的关于推送的默认值(非必须)。发送这条命令:

git config--global push.default simple

我们都设好了。你无需在你的机器上再重复这些配置,但如果你在另一台机器上工作的话,不要忘记这些配置。如果你忘记做初始的配置,Git不会允许你提交任何东西,这会让你困扰。

******创建一个本地代码库

作为例子,我们会假装我们有一个网站(无所谓技术)存在于我们机器上的‘workspace’文件夹下的’my_site’文件夹内。在命令行中,去到你的站点的根文件夹。在OS X和Linux上:

cd ~/workspace/my_site/

在Windows上:

cd c:\workspace\my_site

******我们首先需要告诉Git这个文件夹是我们需要跟踪的项目。所以我们发送这个命令来初始化一个新的本地Git代码库

git init

Git会在my_site文件夹内创建一个名为.git的隐藏文件夹,那就是你的本地代码库。

**第一次吧代码推送到远程仓库(建立连接) git remote add origin <你的项目地址> //注:项目地址形式为:https://gitee.com/xxx/xxx.git或者 git@gitee.com:xxx/xxx.git

********加载(Stage)文件

我们现在需要命令Git我们需要加载(stage)所有项目文件。发送:

git add .

最后的“.”符号的意思是“所有文件、文件夹和子文件夹”。假如我们只想要把特定文件添加到源代码控制中去,我们可以指定它们:

git add my_file,my_other_file

*********提交文件

现在,我们想要提交已加载(staged暂存区)的文件。阅读“添加一个时间点,在这里你的文件处在一个可还原的状态”。我们提交我们的文件时,总是附带着有意义的注释,描述了它们现在的状态。我一直用“initial commit”来作为第一个提交的注释。

git commit -m"initial commit"

就这样。现在你随时都可以回滚到这个提交状态。如果你有需要检查你现在的已加载(staged)和未加载(unstaged)文件的状态、提交等,你可以询问git的状态:

git status

*******创建分支

建立分支是你创建代码的独立版本的动作,独立于你的主干分支。默认地,每次你提交到Git的文件都会被储存到“master(主干)”分支。

现在我们来说说,你想要向项目里添加一个功能,但你想要能够回滚到现在版本,以防出现差错,或者你决定要放弃这个功能。这就是你创建分支的时候了。创建并同时切换到你新建的分支,发送:

git checkout-b new_feature

或者,你可以先创建一个分支然后手动切换,就像这样:

git branch new_feature

git checkout new_feature

****要看你现在项目下所有的分支,发送这个:

git branch

现在你可以在你的项目上无所顾忌地做任何你想做的:任何时候,你都可以回到你创建分支前的状态。注意,你同时可以有多个分支,甚至可以从一个分支上再创建一个分支。

如果需要,可以单独提交分支到远程仓库:(origin是远程连接的名字,dev是新的分支)

git push origin dev

********合并分支

当你对你的新功能满意了的时候,你想要把它加到主干分支上。当你在你的新功能分支上时,你首先需要加载(stage)并且提交你的文件:

 

git add-A.

git commit -m'Add my new feature'

git commit -a -m "提交的描述信息"

git commit 命令的-a 选项可只将所有被修改或者已删除的且已经被git管理的文档提交倒仓库中如果只是修改或者删除了已被Git 管理的文档,是没必要使用git add 命令的。

然后你移到你的主干分支:git checkout master

像这样合并:

git merge new_feature

此时,你的主干分支和你的新功能分支会变成一样的了。

*******丢弃分支

相反,如果你打算丢弃你在分支里做的修改,你首先需要加载(stage)你的文件并且在分支里提交:

git add .

git commit -m"feature to be discarded"

然后,你移到主干分支:

git checkout master

现在,你的代码处于你创建分支之前的状态了。

*******删除一个分支

如果你要把你的分支合并到主干分支,从主干(master)分支上发送:

git branch-d new_feature

假如修改已经合并了,它只会删除分支。假如分支没有合并,你会得到一个错误信息。删除一个未合并的分支(通常你不想保留的修改),你需要发送一样的命令附带一个大写D。意思是“强制删除分支,无论如何我不想要它了。”:

git branch-D new_feature

*******回滚到之前的提交状态

在某些时候,你可能想要回到之前的代码版本。首先,你需要找到你想回到哪个版本。要看所有的完成了的提交,发送:

git log

这会输出你的提交的历史记录,像这样:

commitca82a6dff817ec66f44342007202690a93763949Author:your_usernameyour_email@domain.comDate:  MonNov412:52:112013-0700    changesthefrontpagelayout

commit085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7Author:your_usernameyour_email@domain.comDate:  MonNov411:40:332013-0700    addsmynewfeature

commita11bef06a3f659402fe7563abf99ad00de2209e6Author:your_usernameyour_email@domain.comDate:  MonNov410:37:282013-0700    initialcommit

如果你想回到“adds my new feature”这个提交,简单地用提交的ID做签出(checkout)(我通常只用到ID开头的9个字符)

git checkout 085bb3bcb

你也可以签出到一个新的分支,像这样:

git checkout-b my_previous_version085bb3bcb

只是别太疯狂了!你的分支越复杂,就越难确定你真正在做什么。

******推送到远程代码库

在第一次你想推送一个本地代码库到远程代码库时,你需要把它添加到你的项目配置里。像这样做:

git remote add origin https://your_username@bitbucket.org/your_username/name_of_remote_repository.git

注意这里的“origin”只是一个习惯。它是你的远程代码库的别名,但是你可以用其他任何你喜欢的词。你甚至可以有多个远程代码库,你只需要给它们起不同的别名。

之后,你想要推送你的本地代码库的主干分支到你的远程代码库:

git push origin master

如果你使用Bitbucket,在这时,你会被请求输入你的密码。照做,你的本地代码库会被推送到你的远程代码库上。

取得远程代码库的一份本地拷贝

如果你还没有一份远程代码库的本地版本(例如,如果你在另一台机器上开始工作,这台机器上还没有用过这个项目),你首先需要拷贝(clone)它。去到你的代码库想要拷贝到的文件夹下,并发送:

git clone https://your_username@bitbucket.org/your_username/name_of_remote_repository.git

另一方面,如果你已经在本地的项目上工作了,只是想从远程代码库上取得它最新的版本,移动到项目的根目录下,并发送:

git pull origin master

别名

Git允许你为你常用的命令创建快捷方式(别名)。例如,如果你不想每次都输入git commit -m “some comment”,而是输入git c “some comment”,你可以向你的git全局配置里添加一个别名来实现,像这样:

git config--global alias.c'commit -m'

*******这是我使用的别名列表:

git config--global alias.c 'commit -m'

git config--global alias.co 'checkout'

git config--global alias.cob 'checkout -b'

git config--global alias.br 'branch'

git config--global alias.m 'merge'

git config--global alias.a 'add .'

git config--global alias.s 'status'

git config--global alias.dbr 'branch -d'

================================================================================================================

如何安装Git到MAC OS X

这里介绍两种方式;

一,使用Git command-line

二,使用GUI工具SourceTree,功能很强大,很方便

在进行安装前,要说一下,Git和SVN一样,都需要创建一个服务器的,他们都可以创建自己的版本管理服务器。对于个人和小团队来说,使用托管服务器可能更合适,

常见的有Github 和 Bitbucket。这里我介绍下Bitbucket,Github因为没有个人免费仓库使用,代码放上去就是开源的,所以这里我选择Bitbucket。另外,现在Bitbucket的个人仓库相关页面已经基本汉化了。注册流程也比较简单。

详见链接;https://bitbucket.org/

这里先介绍下使用Command-line。

1,下载Git installer,地址;http://git-scm.com/downloads

2,下载之后打开,双击.pkg安装

3, 打开终端,使用git --version命令查看安装版本,有就是安装成功了

/*以下4.5命令如果已经使用Bitbucket创建过了,将会自动包含*/

4,创建一个全球用户名

git config --global user.name "FIRST_NAME LAST_NAME"

5,创建一个全球邮箱

git config --global user.email "MY_NAME@example.com"

6, 如果不想每次连接远程仓库都输入密码的话,输入如下命令

git credential-osxkeychain

------>等待

git config --global credential.helper osxkeychain

# Set git to use the osxkeychain credential helper

到此Git就安装完成了。

二,关于SourceTree这里先不做介绍。初始安装和SVN类似。

4, 如何使用Git

这里也介绍两种方式

一,使用command

二,使用SourceTree

先介绍第一种;Command line

 

使用终端的命令行时,首先我们要有一定的linux命令行知识。实际使用中经常用到的比较少,这里只介绍一些必要的。

参考链接;http://www.renfei.org/blog/mac-os-x-terminal-101.html

 

linux基础命令;

sudo -s   获取绝对用户权限

cd xxx    进入xxx目录

ls (-a/-A)   显示当前路径下所有文件(隐藏的)

pwd       显示当前绝对路径

mkdir  xxx   创建文件夹xxx

man xxx     查看xxx命令手册

 

然后介绍下Git基础命令的含义;

clone   克隆远程仓库

init       初始化仓库

remote 连接远程仓库

pull      从远程仓库下拉获取新数据

push    将本地仓库新增或修改文件上传到远程仓库

add     添加文件或者修改文件,commit以及push之前使用

log      当前仓库提交过的日志信息

status  当前仓库版本状态

commit 提交到当前仓库中

branch 分支命令,相关增删查操作

checkout 使用远程仓库最后一个版本完全覆盖当前仓库内容/选择分支branch

diff      对比版本内容

merge   合并版本内容

详细参见链接;https://confluence.atlassian.com/display/BITBUCKET/Bitbucket+Documentation+Home

 

使用Git,我们当然要有一个远程仓库,这里假设我们已经创建好了Bitbucket账号(创建远程仓库repository使用)。

创建远程仓库的方法这里也介绍两种方式。

一,使用Git 命令创建

二,在Bitbucket上创建

 

第一种,使用Git 命令行

 

初始化

git init

--------->

从Bitbucket上复制仓库地址

--------->

添加别名为origin的源到远程仓库地址

git  remote  add  origin  https://myAccountName@bitbucket.org/myAccountName/myRepositoryName.git

 

第二种,Bitbucket上创建远程仓库

注册之后按照提示创建即可,非常简单。。。不再复述。

详见参考;https://confluence.atlassian.com/display/BITBUCKET/Bitbucket+Documentation+Home中的Bitbucket 101文档

 

---------以上为初始创建--------------华丽的分割线---------------以下为操作版本库-------------------

 

有了远程仓库Repostiory,我们该添加代码或者其他文件什么的了

 

这里还是介绍两种;

一, 使用command-line

二, 使用SourceTree

 

第一种, 使用command-line

在本地目录链接了远程仓库后(clone命令),使用如下方法操作文件。

 

git add xxx           添加或要修改的xxx文件

------------------>

git commit -m "adding repo instructions"         提交xxx文件到本地仓库版本中 ;-m “XXXX” ;提交log

------------------>

git push -u origin master                提交xxx和log,到远程仓库origin(刚才创建的远程仓库Repository的别名)的master分支下

 

第二种, 使用SourceTree

和svn类似,具体流程为;

add----添加文件到索引----->commit------提交到本地仓库------>push--------上传到远程仓库--------->

 

之后就是对仓库中文件的增加修改删除操作了

 

Ps:记得如果不是单独另需创建的branch,每次对本地仓库操作的时候都要使用 git pull命令,更新远程仓库到本地中,防止冲突。这点和SVN的update类似

 

先介绍到这里,其实操作起来基本和SVN的命令行工具还有gui工具类似。

实际使用中主要区别还是分布式的开发模式不同。

 

欢迎大家来补充~

 

----------------------------------------------------------------------分割线-------------------------------以下为对Git的Branch进行说明-------------------------------------------------

 

Branch就是分支,Git相比SVN,最大的优点是完善的分布式管理。每一个本地的Repository,也就是仓库,都相当于一个本地版本服务器,在此基础上我们可以进行许多Branches,进行不同

类型的开发。Branch的目录统一性使得它的管理,包括merge非常简单方便。

 

一, 先介绍下SourceTree下的Branch,

这里提供个比较详细的博客链接,供大家参考,图文并茂,已经解释的比较详细了,不再复述。

参考地址: http://www.takobear.tw/12/post/2014/02/bear-git-flow-sourcetreegit-flow.html

 

二, 使用command-line创建branch分支

 

待续。。。。。。

 

----------------------------------------------------------------------分割线-------------------------------以下为小技巧-----------------------------------------------

 

1,   Git Stash命令

说到branches,使用Git开发较复杂的项目我想本地肯定会有多个。假如我们有一个临时紧急的重要任务,需要切换到其它branch,那么我们需要commit当前的内容。

但是,假如我修改的内容比较乱,或者其它什么原因不想提交到仓库中呢,这时候我们就可以使用Stash命令了。

$ git stash

这个命令的意思是将当前工作区的内容放到一个临时的区域,这意味着,使用git status,或者add commit命令,是无效的。

但是我们很好的保护了现场。接下来就可以checkout到其它branch工作了。

 

回来之后,要回复一下现场。这里要简单说明下,stash命令的一个工作机制。

当使用了stash命令后,当前工作区域的内容会被push进一个栈队列里,是的,就和navigationController一样。

假如我们要回复现场。有两种选择;pop, 或者apply

 

pop顾名思义,当前暂存内容从栈队列里消失了,apply则和objectAtIndex一样,队列里仍然有该暂存内容。

 

当多个branches被我们stash的时候,会用到如下两个命令;

 

git stash list: 显示Git暂存栈内的所有备份,可以利用这个列表来决定从那个地方恢复。

git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。

 

Ps:记住,多多使用git status 命令,就好比,好记性不如烂笔头。git 帮我们做好的笔记要多多查看,防止出错。

 

2,  让Git忽略烦人不想追踪的文件

一,可以设置整个Git仓库需要忽略的文件。

$ git config –global core.excludesfile ~/.gitignore_global

$vim ~/.gitignore_global

 

然后在.gitignore_global文件里面设置我们想要忽略的文件。比如添加如下

# Mac OS X

*.DS_Store

 

# Xcode

*.pbxuser

*.mode1v3

*.mode2v3

*.perspectivev3

*.xcuserstate

project.xcworkspace/

xcuserdata/

 

#Git

.gitingore

.gitingore.swp

 

之后保存就可以了。如果输入git status仍然提示有不期望的被追踪的文件。需要清理下

$ git rm --cache xxx    xxx为想要忽略的文件

 

好了,再也不会有烦人的文件了

 

二,可以单独为某个目录设置忽略文件。

到想要忽略文件的目录下,

$ vim .gitignore

添加如上规则的名字

保存之后,退出,就可以了。

 

===========

 

 

Bitbucket使用方法

一、软件及SSH keys:

 

由于我的Bitbucket账号的邮箱及用户名与Github相同,所以SSH Public Keys可以用Github的,登录Bitbucket,悬浮在用户名boliquan那里点击“Account”,点击左边的“SSH keys”即可进行设置 软件不用再安装,仍然使用Github的

 

二、创建一个私有项目及上传:

 

登录后鼠标悬停在“Repositories”选择“create repositories”,“Name”填写项目名如ylife,默认勾选了“Private” “Repository type”勾选“Git”,选好项目使用的“Language” “Description”填写描述,“Website”填写发布地址 可以看到私有项目有一个小锁图标 在D盘创建一个Bitbucket文件夹,在里面再创建一个ylife文件夹,并将项目文件放进去,在“ylife”文件夹上右击“Git bash”出现命令框

 

git init  输入这个

git add .添加所有文件(只是在本地准备好,注意那个“.”表示所有文件)

git commit -m 'version 1.2.6'引号中是说明信息

git remote add origin git@bitbucket.org:boliquan/ylife.git

git push origin master  上传步骤到此完成

如果想访问https://bitbucket.org/boliquan/ylife/ 时直接进入源代码页面,点击“Admin”,“Landing page”选择“Source”即可,这里还可以设置很多东西,比如可以勾选“Private”为私有库,取消勾选则变为公有库

 

三、修改本地文件及上传

 

修改好本地文件后,在“ylife”文件夹上右击“Git bash”出现命令框

 

如果添加了内容则要先 git add .

git commit -a -m 'version 1.2.6'修改(本地)

git push origin master  修改(服务器),去Bitbucket网上可以发现已经修改了

四、创建一个tag:

 

在“ylife”文件夹上右击“Git bash”出现命令框

 

git tag -a 1.2.6-m 'version 1.2.6'引号中是说明信息

git push --tags  就可以在Bitbucket网上看到创建的tag了

五、删除某个tag 在“ylife”文件夹上右击“Git bash”出现命令框

 

git tag -d 1.2.6删除这个tag(本地)

git push origin :refs/tags/1.2.6删除这个tag(服务器),这时可以发现Bitbucket网上的那个tag不见了

六、从服务器下载项目

 

在“Bitbucket”文件夹上右击“Git bash”出现命令框

 

git clone git@bitbucket.org:boliquan/ylife.git  会下载到一个以“ylife”命名的文件夹及源码

 

===========忽略文件的设置====

 

 

忽略user interface state文件

步骤:

第一步:删除本地的UserInterfaceState.xcuserstate缓存

命令行:git rm --cached 该文件路径

git commit -m "Removed file that shouldn't be tracked"

[ProjectName].xcodeproj/project.xcworkspace/xcuserdata/[Username].xcuserdatad/UserInterfaceState.xcuserstate

可以通过Finder打开文件

第二步:.git目录下创建.gitignore文件

命令行: vim .gitignore

文件内容:

*.xcuserstate

project.xcworkspace

xcuserdata

UserInterfaceState.xcuserstate

project.xcworkspace/

xcuserdata/

UserInterface.xcuserstate

最后:重新打开Xcode.

****************

 

在mac系统中,当文件夹内容发生变化时候,会生成一个.DS_Store的隐藏文件,很显然在提交代码的时候我们不想让

在Xcode工程中,以下这些文件也是不需要提交到GitHub的。

 

.xcodeproj / xcuserdata

project.xcworkspace / xcuserdata

以上这些都是用户个人配置文件/文件夹,不需要提交。

 

在git管理中可以手动创建.gitignore文件来设置。

随便创一个文件,比如txt文本~

在里面添加如下几句话:

 

# git ignore

xcuserdata

.DS_Store

 

以上两条的命名规则是

忽略所有包含xcuserdata的文件(夹)
忽略所有文件夹中后缀是.DS_Store的文件

然后把文件的名字改成.gitignore(注意在.前面是没有任何字符的),并把文件放在git管理目录的根目录下。

 

在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改 .gitignore 文件的方法。这个文件每一行保存了一个匹配的规则例如:

# 此为注释 – 将被 Git 忽略

            *.a       # 忽略所有 .a 结尾的文件

            !lib.a    # 但 lib.a 除外
            /TODO     # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
            build/    # 忽略 build/ 目录下的所有文件

            doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

    这样设置了以后 所有的 .pyc 文件都不会添加到版本库中去。

    另外 git 提供了一个全局的 .gitignore,你可以在你的用户目录下创建 ~/.gitignoreglobal 文件,以同样的规则来划定哪些文件是不需要版本控制的。

需要执行 git config --global core.excludesfile ~/.gitignoreglobal来使得它生效。

其他的一些过滤条件

    * ?:代表任意的一个字符

    * *:代表任意数目的字符
    * {!ab}:必须不是此类型
    * {ab,bb,cx}:代表ab,bb,cx中任一类型即可
    * [abc]:代表a,b,c中任一字符即可

    * [ ^abc]:代表必须不是a,b,c中任一字符

    由于git不会加入空目录,所以下面做法会导致tmp不会存在 tmp/*             //忽略tmp文件夹所有文件

    改下方法,在tmp下也加一个.gitignore,内容为

                        *
                        !.gitignore
    还有一种情况,就是已经commit了,再加入gitignore是无效的,所以需要删除下缓存
                        git rm -r --cached ignore_file

 

注意: .gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。

    正确的做法是在每个clone下来的仓库中手动设置不要检查特定文件的更改情况。

    git update-index --assume-unchanged PATH    在PATH处输入要忽略的文件。
    另外 git 还提供了另一种 exclude 的方式来做同样的事情,不同的是 .gitignore 这个文件本身会提交到版本库中去。用来保存的是公共的需要排除的文件。而 .git/info/exclude 这里设置的则是你自己本地需要排除的文件。 他不会影响到其他人。也不会提交到版本库中去。
    .gitignore 还有个有意思的小功能, 一个空的 .gitignore 文件 可以当作是一个 placeholder 。当你需要为项目创建一个空的 log 目录时, 这就变的很有用。 你可以创建一个 log 目录 在里面放置一个空的 .gitignore 文件。这样当你 clone 这个 repo 的时候 git 会自动的创建好一个空的 log 目录了。

 

 

今天使用 添加远程github仓库的时候提示错误:fatal: remote origin already exists. 

这里写图片描述

最后找到解决办法如下: 

1、先删除远程  仓库

$ git remote rm origin

2、再添加远程 Git 仓库

$ git remote add origin git@github.com:FBing/-code-generator

如果执行 git remote rm origin 报错的话,我们可以手动修改gitconfig文件的内容

$ vi .git/config

这里写图片描述

把 [remote “origin”] 那一行删掉就好了。

 

 

***************问题*********

如何去解决fatal: refusing to merge unrelated histories

 

我在Github新建一个仓库,写了License,然后把本地一个写了很久仓库上传。

先pull,因为两个仓库不同,发现refusing to merge unrelated histories,无法pull
因为他们是两个不同的项目,要把两个不同的项目合并,git需要添加一句代码,在git pull,
这句代码是在git 2.9.2版本发生的,最新的版本需要添加--allow-unrelated-histories
git pull origin master --allow-unrelated-histories

 

 

**************把已有项目和码云连接

 

*********多台电脑共用SSH Public/Private Key********

新的电脑上需要配置环境。由于Github以及很多服务器上都放置的的是现在公司的MBP的SSH Public Key,要去多个服务器上挨个换新的SSH Public Key是傻瓜做法,不要这么干。最方便的方法是让两个电脑共用一个SSH Public Key;

SSH
好了,下面一步一步来实现SSH Public/Private Key的在多台电脑中的共用:
0. 首先我们给旧的MBP起名叫OLD, 新的叫NEW,方面后面区分
1. 拷贝OLD上的id_rsa和id_rsa.pub到云端/U盘/邮箱/…中备份。这两个文件位于用户目录下的隐藏文件夹~/.ssh/中。
2. 在NEW的终端(Terminal)上执行
ssh-keygen –t rsa –C "youremail@gmail.com"
这样会在NEW的~/.ssh/中生成新的id_rsa和id_rsa.pub
3. 用备份好的OLD中的id_rsa和id_rsa.pub文件,覆盖NEW上对应的文件
4. 确保NEW上的两个文件的权限是正确的,id_rsa是600,id_rsa.pub是644,比如:
-rw------- 1 fancy fancy 1675 2013-03-19 12:55 id_rsa
-rw-r--r-- 1 fancy fancy 406 2013-03-19 12:55 id_rsa.pub
OK, 完事。
================SSH登陆的原理================
接下来说一下SSH登陆的原理,就可以让我们弄明白这种共用Key的方法的由来。
1. 什么是SSH
SSH是一种网络协议,用于计算机之间的加密通信。
2. 公钥Public Key与私钥Private Key
SSH Key
SSH需要生成公钥Public Key和私钥Private Key, 常用的是使用RSA算法生成id_rsa.pub和id_rsa。
公钥Public Key(id_rsa.pub)是可以暴露在网络传输上的,是不安全的。而私钥Private Key(id_rsa)是不可暴露的,只能存在客户端本机上。
所以公钥Public Key(id_rsa.pub)的权限是644,而私钥Private Key(id_rsa)的权限只能是600。如果权限不对,SSH会认为公钥Public Key(id_rsa.pub)和私钥Private Key(id_rsa)是不可靠的,就无法正常使用SSH登陆了。
同时在服务端会有一个~/.ssh/authorized_keys文件,里面存放了多个客户端的公钥Public Key(id_rsa.pub),就表示拥有这些Public Key的客户端就可以通过SSH登陆服务端。
3. SSH公钥登陆过程
客户端发出公钥登陆的请求(ssh user@host)
服务端返回一段随机字符串
客户端用私钥Private Key(id_rsa)加密这个字符串,再发送回服务端
服务端用~/.ssh/authorized_keys里面存储的公钥Public Key去解密收到的字符串。如果成功,就表明这个客户端是可信的,客户端就可以成功登陆
由此可见,只要多台电脑上的的公钥Public Key(id_rsa.pub)和私钥Private Key(id_rsa)是一样的,对于服务端来说着其实就是同一个客户端。所以可以通过复制公钥Public Key(id_rsa.pub)和私钥Private Key(id_rsa)到多台电脑来实现共享登陆。

 

************同一个github帐号在两台电脑上同步开发*********

解决方案是两套key,再写个配置文件,

注意生成两个Key时,不要随便输入enter键就就不会覆盖掉老的两个key
(假设你已经拥有私有账号且已经OK,现在想使用另一个工作用账号):
1:为工作账号生成SSH Key
$ ssh-keygen -t rsa -C "your-email-address"
#存储key的时候,不要覆盖现有的id_rsa,在生成两个Key时,不要随便输入enter键就就不会覆盖掉老的两个key ,使用一个新的名字,比如id_rsa_work 
2:把id_rsa_work.pub加到你的work账号上
3:把该key加到ssh agent上。由于不是使用默认的.ssh/id_rsa,所以你需要显示告诉ssh agent你的新key的位置
$ ssh-add ~/.ssh/id_rsa_work
# 可以通过ssh-add -l来确认结果

 

*********问题集合:

1. git pull 失败 ,提示:fatal: refusing to merge unrelated histories

这是因为远程仓库origin上的分支master和本地分支master被Git认为是不同的仓库,所以不能直接合并。

解决方案:添加--allow-unrelated-histories

假如我们的远程仓库是origin,分支是master,那么我们 需要这样写git pull origin master --allow-unrelated-histories

 

2.git config core.ignorecase false,关闭git忽略大小写配置

你可能感兴趣的文章
Android Studio里面配置Tesseract
查看>>
深入浅出JavaScript之this
查看>>
Android include标签的使用注意事项
查看>>
final成员变量和final局部变量
查看>>
Android数据加密之异或加密算法
查看>>
greenDao好的示例网址
查看>>
SDK无埋点技术在百分点的探索和实践
查看>>
Android自定义控件--仿安全卫士中的一键加速
查看>>
微信小程序快速入门
查看>>
Android EditText被软键盘遮盖处理
查看>>
JavaScript 中变量、作用域和内存问题的学习
查看>>
Android Tools Attributes,让布局设计所见即所得
查看>>
FlipDotView——磁翻点阵显示效果
查看>>
浅析回话技术之Session和Cookie
查看>>
20道经典Java面试基础题
查看>>
Android弹窗PopupWindow
查看>>
JavaScript的原型系统是怎样构建起来的
查看>>
控制反转(IoC)-解析与实现
查看>>
Android内存泄露的原因
查看>>
Java并发总结
查看>>