110
社区成员
CODE.CHINA地址:https://codechina.csdn.net/about#
ssh-keygen -t rsa -C "xxxxx@xxxxx.com"
git clone
+刚刚的git链接git remote add
把它和 gitee的远程库关联,如下git remote add origin git@gitee.com:linxinfa/mytest.git
git remote add origin git@gitee.com:linxinfa/mytest.git fatal: remote origin already exists.
git remote -v origin git@gitee.com:linxinfa/mytest.git (fetch) origin git@gitee.com:linxinfa/mytest.git (push)
git remote rm origin
git remote add origin git@gitee.com:linxinfa/mytest.git
cd my_way
进入这个文件夹里面git add -A
添加所有文件夹fatal: not a git repository (or any of the parent directories): .git
git init
命令生成.git文件
git init #把当前目录变成git可以管理的仓库 git add readme.txt #添加一个文件,也可以添加文件夹 git add -A #添加全部文件 git rm test.txt #删除一个文件,也可以删除文件夹 git commit -a -m "some commit" #提交修改 git status #查看是否还有未提交 git log #查看最近日志 git reset --hard HEAD^ #版本回退一个版本 git reset --hard HEAD^^ #版本回退两个版本 git reset --hard HEAD~100 #版本回退多个版本 git remote add origin +地址 #远程仓库的提交(第一次链接) git push -u origin master #仓库关联 git push #远程仓库的提交(第二次及之后)
分支操作 命令 创建分支 git branch <name> 创建叫name的分支,但仍然停留在当前分支。 删除分支 git branch -d <name>:参数为-D则为强制删除。 git push origin --delete <name> :删除远程仓库的叫name的分支,同名的本地分支并不会被删除,所以还需要单独删除本地同名分支 git branch -dr <remote>/<branch-name>:没有删除远程分支,只是删除 git branch -r 列表中的追踪分支。一般只有git push命令可以修改远程仓库。 切换分支 git switch <name> git checkout <name> 创建+切换分支 git switch -c <name> git checkout -b <name> 上方两条命令一个意思:如果分支存在则只切换分支。不存在则创建叫name的分支,然后切换到该分支。相当于两条命令:git branch <name>,git checkout <name> 查看分支 git branch:查看本地分支,当前分支前面会标一个*号。 git branch -r:查看远程分支。 git branch -a:查看本地分支和远程分支,远程分支会用红色表示出来(如果你开了颜色支持的话)。 git branch -vv:查看本地分支对应的远程分支。 重命名分支 git branch -m oldName newName
git branch <分支名>
,但是却报错了:报错原因就是当前没有 master 分支,无法新建分支。 可以使用以下命令查看当前分支:
git branch
git branch
这个命令后你会发现什么都没有输出,证明你还没有主分支新建 master 分支: git 提交一次代码就会自动保存到 master 分支。
git checkout Dark
git add folder
git push origin Dark
不同分支的 commit 是不会产生冲突的,因为 commit 提交到的是当前分支的 本地库。 只有将分不同分支的本地库进行合并才会产生冲突。所以: 合并本地库会产生冲突 拉远程分支的代码也会产生冲突
两个人写同一个文件就可以 先提交的不会有冲突,后拉取的会有冲突 同一个机器,不同分支,写同一个文件,也可以产生冲突
A 、B 两分支操作同一个文件的同一行代码。 A 分支 commit B 分支 commit B 合并 A,就会产生冲突
git pull origin xxx
分支名称
git add .
这里可能会报一个错:warning: LF will be replaced by CRLF in folder/file2.txt. The file will have its original line endings in your working directory
git config --global core.autocrlf false
原因是路径中存在 / 的符号转义问题,false就是不转换符号默认是true,相当于把路径的 / 符号进行转义,这样添加的时候就有问题
git commit -m "注释信息...."
+ git push origin master
git reset --hard head
我叫Dark
,Light分支里面的文件写的是:我叫Light
,然后我们目前是Dark分支,我们修改了这个文件里面的内容为:我是新一代Dark!,然后我们add+commit+push到Dark分支,然后我们切换到Light分支,此时要是直接merge Dark就会发现你的文件内容从我叫Light
变成了我是新一代Dark!
,因为这个git是会区分主次的!你前面的修改了然后推送成功就会变成主!其他的人现在只要merge你的分支都会变成你的样子,然后我们怎样知道冲突呢?那就是,回到刚刚Dark分支已经add+commit+push这一步,然后我们还是切换到Light分支,此刻我们不要去马上merge合并,因为这样就会成功把现在为主的master代码覆盖过来,我们要先修改这个test.txt文件,修改完了以后我们也去在Lignt分支add+commit+push,然后一切完了以后我们再来merge Dark就会出现Dark|MERGING冲突报错!因为现在Light也去Push了也成了所谓的主,此时就有两个主了,就会报错了!然后你现在切换到Dark分支立马执行merge Light
,你会发现同样是冲突错误!那么这个怎么解决呢?我前面说的使用git reset --hard head 知识回滚,并不是解决问题的真正方法,真正方法就是在两个王的基础上培养一个王中王!那就是在MERGING错误的时候你找到并打开错误文件,会有这样的样子:<<<<<<< HEAD和=======中间的是你自己的代码, ======= 和>>>>>>>中间的是其他人修改的代码
Workspace:工作区,就是你平时存放项目代码的地方
Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换
Directory:使用Git管理的一个目录,也就是一个仓库,包含我们的工作空间和Git的管理空间。
WorkSpace:需要通过Git进行版本控制的目录和文件,这些目录和文件组成了工作空间。
.git:存放Git管理信息的目录,初始化仓库的时候自动创建。
Index/Stage:暂存区,或者叫待提交更新区,在提交进入repo之前,我们可以把所有的更新放在暂存区。
Local Repo:本地仓库,一个存放在本地的版本库;HEAD会只是当前的开发分支(branch)。
Stash:隐藏,是一个工作状态保存栈,用于保存/恢复WorkSpace中的临时状态。
# 列出所有本地分支 git branch # 列出所有远程分支 git branch -r # 新建一个分支,但依然停留在当前分支 git branch [branch-name] # 新建一个分支,并切换到该分支 git checkout -b [branch] # 合并指定分支到当前分支 $ git merge [branch] # 删除分支 $ git branch -d [branch-name] # 删除远程分支 $ git push origin --delete [branch-name] $ git branch -dr [remote/branch]
我们学习的东西,一定是当下最流行的!
主流的版本控制器有如下这些:
Git
SVN(Subversion)
CVS(Concurrent Versions System)
VSS(Micorosoft Visual SourceSafe)
TFS(Team Foundation Server)
Visual Studio Online
版本控制产品非常的多(Perforce、Rational ClearCase、RCS(GNU Revision Control System)、Serena Dimention、SVK、BitKeeper、Monotone、Bazaar、Mercurial、SourceGear Vault),现在影响力最大且使用最广泛的是Git与SVN
1、本地版本控制
记录文件每次的更新,可以对每个版本做一个快照,或是记录补丁文件,适合个人用,如RCS。
2、集中版本控制 SVN
所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改
所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。而且,所有数据都保存在单一的服务器上,有很大的风险这个服务器会损坏,这样就会丢失所有的数据,当然可以定期备份。代表产品:SVN、CVS、VSS
3、分布式版本控制 Git
每个人都拥有全部的代码!安全隐患!
所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。
不会因为服务器损坏或者网络问题,造成不能工作的情况!
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。
Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网了,因为版本都在自己电脑上。协同的方法是这样的:比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。Git可以直接看到更新了哪些代码和文件!
Git是目前世界上最先进的分布式版本控制系统。
假如我当前本地是主分支,和另一个分支second一模一样,然后我在主分支新建了一个one.txt文件,我add➕commit后,我push origin second,而不是push origin master ,然后我checkout到second分支后我pull发现新文件并没有过来,只有merge master才可以过来,那么我就好奇我在push的时候push origin 后面加的这个远程仓库好像并没有什么区别,这是为什么呀