本博客暂时只作为个人资料,后续会进行完善,主要内容来自:
【【Git第一讲】:git分区与两个盒子的故事】
理解暂存区和未暂存区
git为什么要多一个暂存区?难道不能我把代码写完后就是未暂存区,然后直接提交到版本库吗?
比如说我现在开发了很多的代码,
比如说在file1中,我们开发完成了功能A、功能B的50%和功能C,
然后我们在file2中完成了功能B的另外50%。
我们现在如果想直接提交到版本库,在commit的时候,我们应该把所有的代码改动都应该说清楚,鉴于我们所改动的代码较多,一个commit感觉有点难说明白,因为我们在file1中开发了这老些功能,然后有的还没开发完,随后我们在file2中又开发完了a中没有完成的部分,你应该怎么描述这个commit呢?
如果我们一起行直接把所有代码全部提交到暂存区中,会导致我们的代码非常乱。
所以说:
如果没有暂存区,那么我们只能把多文件的,大量的代码进行一次性的提交
现在又了暂存区,我们可以选择暂存部分、单独的文件,甚至我们可以只暂存某些行甚至一行!!!!!
如果对于某一个功能,我们涉及到了数十个文件,并且在文件中互相参杂着别的功能的代码,这样我们就能非常清晰得完成功能B的上传,先单独把功能b上传到暂存区,然后commit信息“完成了功能B的开发”,随后把暂存区代码上传到版本库。
各操作解析:
最后在终端上我们可以使用:
git status
来查看:
- 已暂存的梗菜(将要被提交)
- 尚未暂存的更改(也就是已经修改但出于未暂存区)
- 未跟踪的文件
示例输出如下:
On branch main
Your branch is up to date with 'origin/main'.Changes to be committed:(use "git restore --staged <file>..." to unstage)new file: file1.txtmodified: file2.txtChanges not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified: file3.txtUntracked files:(use "git add <file>..." to include in what will be committed)file4.txt
- Changes to be committed: 列出已经暂存的文件,这些文件将包含在下次提交中。可以使用 git restore --staged 来取消暂存。
- Changes not staged for commit: 列出已经修改但尚未暂存的文件。可以使用 git add 将这些文件添加到暂存区。
- Untracked files: 列出未被 Git 跟踪的文件。可以使用 git add 将这些文件添加到暂存区并开始跟踪
变基or合并、如何撤销变基和合并
其实合并和变基做的是一样的操作。
那么为什么我们应该选择变基而不是合并呢?
合并会让各个分叉做连线,非常丑,所以我们应该做变基。
自行到 gittree 实验即可
面对冲突要么妥协要么解决
只要修改不在同一个文件的同一个位置,就不会引起冲突。
当两个分支同时对某一个同一个位置的代码作出修改的时候,我们到底应该如何把两个分支代码合并到一起。
妥协
妥协指的是妥协于其中一个冲突
解决冲突
A分支和B分支同时修改了一个地方,他们两个代码都有用,但是我要重新调整一下组织形式,所以说我们就把代码改一改再提交。我们称为解决冲突。
git和github
- 如何将本地与远端建立联系:SSH
- 查看电脑中是否存在ssh的key
ls -al ~/.ssh
,应该关注 - 如果没有就进行创建:
ssh-keygen -t rsa -b 4096 -C "caiziming0011@gmail.com"
- 添加ssh私钥到ssh代理(不添加也可以),启动ssh代理
eval "$(ssh-agent -s)"
,然后将私钥添加到ssh代理ssh-add ~/.ssh/id_rsa
- 将公钥添加到 github 上。
cat ~/.ssh/id_rsa.pub
- 验证是否连接成功:
ssh -T git@github.com
- 如果失败:
- 查看电脑中是否存在ssh的key
- 将 git_study 仓库推到远端(origin是远端仓库名,可以起别的名字但是一般用这个)
git remote add origin git@github.com:hong-kailin/git study.git
将名为 origin 的远程仓库与指定的 GitHub 仓库地址关联起来git remote set-url origin git@github.com:czm-tech1/guttest.git
git branch -M master
将当前分支重命名(不是必须)git push -u origin master
将master分支关联到origin(master也可以是别的分支)
- 其他常用命令
git remote -v
查看远程连接git remote remove origin
取消与远程仓库的连接git push
将本地的提交推送(上传)到远程仓库git pull origin master
从远程仓库拉取(下载)最新的提交到本地仓库,并自动合并到当前分支git fetch origin
从远程仓库拉取最新的提交到本地仓库,但不会自动合并到当前分支。需要手动合并