2021/5/21 更新
add , commit(更新到本地仓库:.git下),push(推送到远程相同名称的分支下,例如local/Test - > origin/Test)
Merge(与其他分支合并,选用No Fast forward,能看到新建立的节点信息)
操作都是在本地操作
pull会拉取远程相同名称的分支,例如local/Test - > origin/Test
更新远程分支信息 GIt->Fetch
测试demo:https://gitee.com/shawnday/Hello-Word
了解git
1.集中式VS分布式
集中式 (CVS,SVN)
集中式必须要联网,版本库集中存放在中央服务器,干活时都用自己的电脑。
分布式(Git)
分布式无需联网,每个人电脑上都是一个完整的版本库。多人协作不同电脑只需把自己的修改推送给对方。
2.安装Git(Windows)
->全默认
至最后
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
3.创建仓库
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
3.添加文件并提交文件
初始化一个Git仓库,使用git init命令。
添加文件到Git仓库,分两步:
使用命令git add <file>,注意,可反复多次使用,添加多个文件;
使用命令git commit -m <message>,完成。
$ git add readme.txt
$ git commit -m "append GPL"
[master 1094adb] append GPL
1 file changed, 1 insertion(+), 1 deletion(-)
3.查看
$ git status //可随时掌握工作区状态
$ git diff //可查看修改内容
4.时空穿梭
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令
$ git reset --hard commit_id。
穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
4.工作区与暂存区
工作区与暂存区5.修改管理
直接丢弃工作区修改,用 git checkout--file
已在暂存区,1.用git reset HEAD <file> 2.git checkout--file
已经commit(前提是没有推送到远程库),版本退回
其中,git rm <file>不仅删除了文件,还添加到了暂存区。
rm <file> 只删除了工作区的文件。
5.创建SSH key
$ ssh-keygen -t rsa -C "youremail@example.com"
关联一个远程库(例如github),使用命令
$ git remote add origin git@github.com:michaelliao/learngit.git
关联后,使用命令
$ git push -u origin master
第一次推送master分支所有内容
此后,每次推送最近修改使用如下命令:
$ git push origin master
6.克隆仓库
要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。
Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。
$ git clone git@github.com:michaelliao/gitskills.git
7.分支指令
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支至当前分支:git merge <name>
删除分支:git branch -d <name>
查看分支合并图:git log --graph
当Git无法自动合并分支时,就西部首先解决冲突。解决冲突后,再提交,合并完成。
8.存储工作现场
手头工作未完成时,先把工作现场git stash一下,去修复bug,修复后,再git stash pop,回到工作现场。
与IDEA集成
最近工作的时候,一开始直接在master分支上进行了修改,忘记从master分支上拉一个分支下来了。在我直接checkout 分支(a)的时候,发现默认还未add或commit/push的文件改动(包括断点等的设置)直接带到切换后的分支(a)上。在我这个分支commit和push后,我切换回master,发现master还原了。就很奇怪。 经过实验,只要commit之后,master等就会复原到没有add的情况下。
IDEA 帮助文档提供了切换分支时的选项说明;
image.png-
本地分支切换的时候(例如A切到B),会弹出来Restore workspace on branch switching 对话框,如果选择是的话,在切换分支的时候,你在当前分支(A)所做的一些还未add或commit/push的文件改动(包括断点等的设置)会带到切换后的分支(B)上;
-
如果本地工作空间没有uncommitted changes, 分支会顺利切换
-
如果本地工作空间(分支A)有些文件会被分支B改动,IDEA会弹出对话框,让你选择Force Checkout 或 Smart Checkout;
如果选择Force Checkout, 本地工作空间(分支A)的一些未提交的修改会被覆盖(被分支B覆盖),会有很大可能丢代码!!!
如果选择Smart Checkout,IDEA会先执行stash命令,贮存这些未提交的修改,然后checkout 到分支B,在切换到分支B后,unstash 这些修改,所以A分支本地的这些修改会带到B分支上。
网友评论