Fork me on GitHub

git命令与Sourcetree使用

  很早之前就听说做为一个程序员会使用git是非常重要的,于是乎在我在早前就接触并学习了git。

其实早期我接触git,纯粹是为了弄一个所谓的github云笔记,也就是草草了事了。

随着个人hexo博客的搭建,以及个人前端小项目的产生,让我对全面学习git的好奇心只增不减(虽然我的小项目根本几乎没有所谓的版本,发布后几乎没怎么改)。

  下面,我来简单介绍一下我对git的一些认知。涉及团队合作啥的复杂git命令我还在建议学习一下git的可视化客户端工具Sourcetree(我的前车之鉴😭,没必要用git命令来装逼)。

一、仓库与版本

  一个项目的完成,往往会产生很多的版本,而伴随着新版本的产生,项目会变得趋于完善。

1、仓库---(特殊的文件夹)

  个人理解,仓库可以想象成一个特殊的文件夹,不同的是它可以通过git命令查看自己以前的版本项目。

想一想,自己电脑上的文件夹,要么保存修改,要么舍弃,只能二选一;而如果把它搞成一个仓库文件夹,就不用担心这样的事情了,即使你保存了修改,任然可以通过git命令查看修改之前的版本内容。

  类似于软件,有不同的版本。一旦当前要开发时出现有问题,要么在仓库中找到前面的版本进行重新开发升级,要么对当前的版本进行修改。

  仓库就这样,经过一次次的迭代,存放着不同的版本项目。即:仓库以版本为单位进行存储

2、自己的远程/本地仓库间联系

Remote:远程仓库(例如:自己的GitHub仓库、码云仓库)

Repository:本地仓库(即我所说的特殊的文件夹)

workspace:工作区(即你正在编辑的版本或者当前在特殊文件夹所看到的文件版本)

重点:👀

index:缓存区(修改后的项目文件进入仓库前都要经过缓存区)

  不同的状态。

2、版本与分支

  git是什么?——一个分布式版本控制工具。涉及团队协作时,版本控制显得尤为重要,不同团队负责不同的分支(branch),最终与master分支合并,形成一个项目版本。

  当然就个人使用来看,基本上一个master分支就可以了。涉及团队协作时,往往设计多个分支(例如:bug修复分支hot_fix、开发者分支dev等等),用Sourcetree可视化客户端比较直观、方便。

  一个节点对应一个版本,一个仓库(项目)可以有多的分支;反正最后是要与master分支合并的。

二、git的安装与基本命令

1、git的安装与配置

git命令在Git Bash Here命令行中进行😎。

下面我介绍的git命令对于个人使用完全够了,即:只涉及一个master分支

配置用户信息:

git config --global user.name "名字"

git config --global user.email "邮箱地址"

2、git的基础命令

①git的查看命令:

git status ✨ 查看项目文件此时的状态(在工作区、缓存区还是在仓库中)

git config --list 查看全部的用户信息

git log 查看所有的版本信息(例:版本ID、当前处于哪个分支)

git reflog 查看所有的操作记录

git remote -v 查看远程仓库库地址

git mv <_filename> <new_filename> 修改项目文件名字


②专有名词:

master:默认开发分支(最新版本的名字)

origin:给远程仓库地址起别名的常用名字(http方式)

origin_ssh:给远程仓库地址起别名的常用名字(ssh免密方式)

HEAD:当前所在的版本(在分支操作时,也叫没有命名的分支)

HEAD^ :上一个版本

HEAD~n:前n个版本

Linux基本命令

pwd、mkdir、cd、*.txt 、. 、ls、rm

vim、cat、Ctrl+C、I键 等等

三、git的常用命令(个人使用:)

1、git的本地操作

1>、创建本地仓库

git init 将普通文件夹变成一个仓库文件夹

2>、提交工作区文件

git add <_filename> 将单个项目文件推到缓存区

git add . 所有项目文件推到缓存区


git commit -m <_add a readme file> <_filename> 将单个缓存区的项目文件推到本地仓库

git commit -m <_add a readme file> -a 所有缓冲区的项目文件推到本地仓库

每一次commit就会生成一个节点,当然一次commit可能提交了多个项目文件,提交多个项目文件时在<_filename> 后面加 <_filename2> <_filename3> ……就可以了

即每发生一次commit就会生成一个版本👀

3>、撤回项目文件(可继续编辑)

①工作区已修改项目文件的撤回

git checkout -- <_filename> 将工作区修改的项目文件撤回到初始状态

即Ctrl + Z的升级版:撤销当前版本中修改后已经保存但未commit的项目文件


②缓存区中项目文件的撤回

git reset HEAD -- <_filename> 将缓存区的项目文件撤回到工作区

此时回到了①的状态

git checkout -- <_filename> 将工作区修改的项目文件撤回到初始状态

上面两个步骤的综合git命令:

git checkout HEAD -- <_filename> ✨直接将缓存区的项目文件撤回到初始状态

【延展:git checkout HEAD . 这个表示把缓存区所有的项目文件撤回到初始状态 】


③本地仓库中项目文件的撤回

因为文件已经commit,所有只能回滚到历史版本

4>、比较项目文件修改前后的区别

①工作区与缓存区的项目文件相比较

git diff <_filename> 单个项目文件

git diff 所以项目文件

②缓存区与当前版本已提交的项目文件相比较

git diff HEAD <_filename>


③缓存区与本地仓库历史版本的项目文件相比较

git diff <版本id> <_filename>

4>、删除已提交的项目文件

①只删除工作区的项目文件

git rm <_delete_filename>


②同时删除缓存区的项目文件

先git rm <_delete-filename>

然后 git add <_delete-filename>


③同时删除本地仓库的项目文件

先git rm <_delete-filename>

然后 git add <_delete-filename>

最后 git commit -m <_add a readme file> <_delete-filename>

5>、回到历史版本/找回已删除的项目文件(俗称回滚)

git reset --hard HEAD (全部回到当前版本的初始状态)

即 这个git命令可以找回工作区、缓冲区已经删除的项目文件


git reset --hard <版本ID> (工作区,缓存区、本地仓库内容全部后退的历史版本状态)

即 这个git命令可以在历史版本中找到本地仓库已经删除的项目文件

git reset --soft <版本ID>

2、git的远程操作

1>、本地仓库与远程仓库间的克隆

git clone <GitHub仓库地址/本地仓库目录> 将项目克隆一份到新的本地仓库

2>、为自己已创建的远程仓库(GitHub仓库)地址取别名

git remote add origin <GitHub仓库地址>

即: git remote add <仓库a地址别名> <仓库a的地址>

默认别名为 orgin

3>、将本地仓库推送到自己的远程仓库

先 git remote add origin <GitHub仓库地址>

// 🙏git pull  origin master       将远程仓库最新的代码拉到自己的工作区[刷新 ]✨(团队合作时,远程仓库可以会有其他团队成员push了新的项目代码,防止后续自己push时产生冲突)

git push origin master 将本地仓库推到GitHub远程仓库(origin) 【此处要录入你的GitHub账号和密码】

即: git remote add <仓库a地址别名> <仓库a的地址>

三、git分支相关命令(团队使用)

1、创建、切换、删除分支

git branch <分支名> 创建本地仓库分支

git checkout <分支名> 切换本地仓库内的分支 【git checkout orign/master 切换到远程仓库的master分支】

git branch -D <分支名> 删除本地仓库的分支


git branch -v 查看所有的分支

git log --oneline --decorate --graph --all 查看分支结构

一个项目往往有许多模块,在master分支基础上创建不同的分支,让不同的团队去

开发不同的模块,最后与master分支进行合并,能提高开发效率。

2、合并分支

git merge <要一起合并的分支名X> 表示当前分支与分支X合并

3、合并冲突

  原因:当前分支的某个版本和要合并的分支某个版本,有同一个项目文件,但内容不同。

解决方案: 修改存在冲突的项目文件内容即可

①要么以当前分支的内容为准&emsp; ②要么以要合并的内容为准  ③要么两个都要,去掉重复内容即可

   然后:

git add <_conflict-filename>

git commit -m  

   注意,🐱‍👤这里与前面的commit命令不同,commit命令后不用加文件名

4、个人所在公司团队间git的远程操作

1>自己公司成员间的git基本操作

git clone <公司项目的远程仓库地址> 将远程仓库项目克隆一份到自己的本地仓库


git remote add origin <GitHub仓库地址> 将远程仓库项目地址命名为origin

git pull origin master 将远程仓库项目(origin)拉到个人本地工作区 【相对于管理者的先fetch再margin】

git push origin master 将在本地仓库中个人完成的项目内容push到远程仓库(origin)的master分支上✨【此处要录入你的GitHub账号和密码

①前面由于是将个人本地仓库 push 到 自己的GitHub远程仓库,登录自己的GitHub账号是可以成功的。

②但团队协作时,如果直接push是不会成功的,因为项目的远程仓库往往不是自己建的 ,所以要想push成功,首先要加入 项目团队

2>加入项目团队

  首先需要项目仓库创建者(管理者)让你加入团队,并给你发送了邀请地址

  然后,自己在GitHub上登陆自己的GitHub账号,在上面的网址栏粘贴邀请地址,同意后该项目仓库就会显示在你的GitHub里面。

3>相对于项目管理者的git命令

先抓取远程分支的 最新数据到自己的本地仓库,但工作区内容仍然没变(并没有和本地仓库合并,还是当前的项目版本

git fetch origin master


然后切换到远程仓库查看 项目内容是否有误

git checkout origin/master

cat ……


最后确定无误后,才将本地仓库与远程仓库合并,工作区内容也相应改变(此时项目合并后数据更新,产生新的项目版本

git margin origin/master

5、跨公司合作git的相关远程操作

  合作公司A首先要先得到我们公司项目地址,然后fork项目到他们的GitHub中去。

  然后合作公司A自己进行项目优化,完成优化后pull request给我们的公司审核

  我们自己的公司通过上图的pull request模块中进行检查、交流后,最后merge pull request通过申请。

四、ssh免密登录(单个账号)

  通过ssh免密操作,当自己将本地仓库push到远程仓库时就不需要密码验证了。

1、免密登录实现基础

1>、进入用户主目录

cd ~

ls

2>、通过下面的命令即可在用ls命令得到的目录下建立一个.ssh文件

ssh-keygen -t rsa -C <个人的GitHub账号邮箱地址>

通过上面的命令,不仅生成了一个.ssh文件,并且该文件目录下自动生成了id_rsa和id_rsa.pub两个文件

3>、复制id_rsa.pub文件里的全部秘钥内容

4>、将秘钥内容与GitHub账号相关联

2、ssh免密登录方式的使用

1>、为项目仓库地址添加一个ssh地址别名

git remote add origin_ssh <远程项目仓库的ssh地址>

git push origin_ssh master

即:git命令和前面的一样,只是涉及origin时,将origin改为origin_ssh即可

五、Sourcetree客户端

注意: ①使用分支时,不能有未提交文件的分支。

1、重置到当前分支到此次提交

      ----> 通常选择强制合并

2、回滚提交

     ---->操作自动合并master分支问题

3、查看历史版本

     ---->双击即可查看的历史节点(前提:当前没有未提交的修改文件)

4、修改历史版本并创建新的分支

     ---->创建新的分支(前提:要给它命名)

5、分支合并💖

     ---->最后一定会发生

6、合并冲突❤

     ---->呵呵,我懂就行


五、友情提示:

​   软件、插件下载

​    git命令学习文档

​   Sourcetree学习视频

​   git的学习视频

更多内容,欢迎🎉🎉光临https://github.com/Lencamo

posted @ 2021-09-17 12:12  Lencamo  阅读(363)  评论(0编辑  收藏  举报