Pycharm git 使用
工作区和暂存区
为什么把这个放这里,我觉得理解这两个概念,可以帮助我们更好的使用git,在脑海里面大概知道git在做什么。
工作区(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 add
命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit
就可以一次性把暂存区的所有修改提交到分支。
working tree clean
$ git status
On branch master
nothing to commit, working tree clean
所谓的working tree clean指的是
git add 以后这样
执行git commit
就可以一次性把暂存区的所有修改提交到分支,stage干净了,就是working tree clean
分支管理
在版本回退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master
分支。HEAD
严格来说不是指向提交,而是指向master
,master
才是指向提交的,所以,HEAD
指向的就是当前分支。
一开始的时候,master
分支是一条线,Git用master
指向最新的提交,再用HEAD
指向master
,就能确定当前分支,以及当前分支的提交点:
每次提交,master
分支都会向前移动一步,这样,随着你不断提交,master
分支的线也越来越长。
1.集成git
现在一般都会自动检测
2.集成GitHub
我的已经登录好了。
3.打开版本控制
通过 Pycharm 打开你的项目,然后
点击确定以后,会提醒你
这时候,项目里面会生成一个隐藏的.git文件夹
这里就是git的创建版本库环境,.git文件夹里面是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。
4.在github上共享项目
添加之后就会推送
打开github,推送成功。
5.添加项目文件
新建一个py文件
这里的添加就是git add
命令
添加以后,进入了暂存区,git 就会跟踪这个文件,git status
就是tracked
如果不添加,文件位于工作区,git status
就会显示Untracked files,在pycharm里面颜色是红色。
这里的提交就是git commit
命令
提交以后,文件进入了本地仓库,即进了分支master或其他分支。文件颜色成为无色,如图git-learn
有三个文件被提交到了本地仓库,两个文件被忽略了,现在我们推送到github.
这样我们就能在github上看到了
6.通过文件名颜色识别文件状态。
红色
表示在工作区,创建时没有添加的文件,可以手动添加
淡黄色
忽略以后的文件是淡黄色的,不会被上传到github。
忽略文件,忽略文件有两种方式,第一种比较推荐,他会在项目里面创建.gitignore文件,在里面你可以看到自己忽略了哪些文件,这个似乎是插件的功能。
第二种方式是在.git隐藏文件夹里面来标明的。
忽略以后的文件是淡黄色的
绿色
表示在暂存区
蓝色
表示文件有修改,位于暂存区,没有提交。
无颜色
表示位于本地仓库区或已经提交到远程仓库区,我这里是提交到了本地仓库区。
由暂存区提交到仓库以后,又变为了无色
7.分支操作
本地主分支名为master,远程主分支为origin/master
通过pycharm使用git[图文详解] - 三流码农 - 博客园
默认初始化完的工程会有一个master分支,我们一般在dev分支上开发,之后测试没问题再合并到master上,现在就新建一个dev分支
在pycharm的右下角有git的相关分支信息(前提是用了git),可以看到当前只有一个master分支(本地和origin)
从origin master checkout一个分支到本地命名为dev
从远程签出一个分支到本地,名为div,注意,这个dev实际是本地的,origin并没有dev分支
一般情况下就在本地的dev上开发即可,开发完就可以删掉这个本地dev分支了,如果想在origin上也创建一个dev分支,需要推送一下。
现在github上就有了两个分支
我这里的理解是从本地或者远程都可以拉取一个分支,现在试一下。从本地master拉取一个div2分支
现在github上有了三个分支,分支div和master一样,我没修改。
div2有个如图所示的文件,其他一样
checkout
当前分支div2
切换分支,点击右下角分支名称,选择要切换的分支,点击【Checkout】后,等待分支切换成功,
我们可以看到,切换回嘞master
分支 ,本地拉取分支div2.py文件不见了。
分支代码提交并push后
可合并分支,首先切换到要合并的分支上(此处切到master主线),点击分支名称,选择要被合并的分支,点击【Merge into Current】,等待合并成功
当前分支div2 合并了 div3,多了文件div3.py.
分支合并后即可删除分支,删除分支必须先切换到其它分支,如:共有master和dev分支两个分支,若要删除dev,必须先切换到master上,点击左下角Git,选择要删除的远程和本地分支,点击删除图标即可
8.从远程拉取
对我来说暂时不太常用,大概测试一下
在远程仓库div分支新建了README.md文件
拉取下来了,但是拉取的内容和远程不一样,本地master合并了远程分支。
git pull相当于git fetch与git merge一起使用,但是这样使用容易出错所以推荐第一张方式
为了拉取下来的分支就是远程的div,我们选择从远程检出(checkout)
从远程检出的div成了一个新的本地分支。有了一个README.md
问题
git查看分支从哪个分支拉出来的?
看reflog
或者在创建分支的时候用各种手段记录一下
git的分支之间没有那种“父子关系”
有直接关系的是各个commit
分支只是附加在某个commit上的引用
哪些推送哪些不推送
但是,并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?
master
分支是主分支,因此要时刻与远程同步;dev
分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;- bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
- feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
总之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定!
对我来说即是:
backbone的本地主分支和远程主分支时刻同步,以远程分支为主要,确定无误后推送到远程分支。
然后我需要加方法的时候就拉取分支,命名为backbone_方法名,然后有效果的就推送到远程分支,无效的留在本地分支以后使用。
关于Rebase
变基只是让快照变成了一条时间线上,git log --graph 会看起来好看些。 而且在自己的本地工作区操作变基没什么问题,如果是多人合作,别人更改后的内容push到了公共库中,可能他也进行了rebase后push的,你拉过来后,直接合并,查看日志就会看到很混乱的两个一模一样的提交日志。我也不知道我在讲啥,反正我是去看了官方文档后,才一知半解的。我个人觉得工作中没有要求用变基,就不要用了。
后期的一些实战
我在别的分支上编写代码以后,如果不提交,直接又转到别的分支,那么在那个分支上编写的代码,会出现在新检出的分支上。
标签:git,Git,master,提交,使用,PyCharm,远程,分支 From: https://www.cnblogs.com/CLiuso/p/pycharm-git-use-1hf8i4.html