Git命令解析、Git基本使用

git这个东西不得不说,真的很好用,功能很强大,用过的人都知道。

我不知道有多少人像我一样刚接触的时候两眼瞎,这都是什么鬼东西。

反正我是直接撸官网的那本书撸了两天,挺浪费时间的,不过我觉得我算是入门了,其实也不是很复杂。

基本的使用也就这些命令,我会给出几个场景(可能我并没有实践过<笑哭.png>)。

Begin:

git init        初始化一个文件夹为仓库,会生成一个.git文件夹隐藏

git init --bare 同上也是初始化一个仓库,不过这个仓库是一个裸仓库

git clone <url> [文件夹别名]

Process:

git status 查看当前仓库的状态[未跟踪,已跟踪,已修改,已放入暂存区](建议自行了解一下这个。)

git status -s    精简输出状态
?? 表示未跟踪, 
A  已放入暂存区,
M左栏说明已修改但是未暂存,右栏说明已修改已经暂存 ,两栏都有则说明文件已修,暂存后又做了修改
git add <filename>(多功能命令):精确的将内容添加到下一次提交中

1、可以开始跟踪新文件

2、把已跟踪的文件放入暂存区

3、合并时把有冲突的文件标记为已解决状态
git diff :查看未放入暂存区的文件具体改变了那些的内容。(同已经暂存的文件的比较)
git rm <filename> == rm -rf <filename> && git add <delete_filename>

git rm -f <filename>  这两条命令都是删除文件。
git mv old_path new_path 改名或者移动位置
git commit 提交

git commit -m "加上注释提交" 只是提交已经在暂存区中的文件

git commit -a -m "init" 提交并加上注释,跳过暂存区,直接把所有跟踪的文件都提交。

git commit --amend 
若是提交过后发现忘记某些内容,可以进行随意修改,
然后将该文件添加到暂存区,再使用该命令可以替换掉之前存的快照。
git log 查看历史的commit信息

git log -p 或者 --patch -2(-p表示显示每次提交所引入的差异,-2表示只显示最近的两条提交。)

git log --all 可以查看所有的分支日志。

git log --oneline --decorate 显示SHA-1校验和、分支、提交信息

git log --oneline --decorate --graph --all 
打印提交历史记录,显示分支指针在何处以及历史记录如何分叉。
git branch 查看本地所有分支

git branch -a 查看所有的分支

git branch -r 查看远程所有的分支

git branch -d 删除分支(若删除的分支还有未合并的部分则删除的时候回失败)

git branch -v 查看每一个分支的最后一次提交

git branch --merged 查看有哪些分支已经合并到了当前分支

git branch --no-merged (可以加一个分支名参数,查看某一分支) 查看有哪些分支还没有合并到当前分支


注:建议了解一下分支的概念。
git checkout <branch_name>    切换分支名

git checkout -b <newbranchname>    创建新分支,并同时进行切换

git checkout -    返回到上一个分支
git remote	查看远程仓库

git remote -v	显示远程仓库对应的URL

git remote add <shortname> <url>		添加一个新的远程仓库,并设置一个简短名

git remote show <shortname>		查看某个远程仓库

git remote rename <old_name> <new_name> 修改远程仓库的名字,相应的分支名字也会发生改变

git remote remove <shortname>	删除一个远程仓库,其他的配置也会一并被删除

注:同样建议了解一下,remote是用来做什么的。
git fetch <shortname简称>    可以获得简称对应的仓库中,当前仓库所未拥有的所有信息。

git pull <remotename> <branch>    
使用fetch完一般只是获得的对应仓库的对象,
并没有把实际的文件clone到本地所以需要pull一下,
pull操作会自动执行合并操作,然后把实际的文件clone到本地。

关于场景我举个例子:
假如有一个主仓库,很多用户都fork了这个仓库。
然后其中一个多个人发送了一次合并请求,
管理员也同意了这些合并请求,这样其实每个人fork的仓库对于主仓库都不是最新的。
所以在本地操作的时候,需要先fetch一下主仓库,然后pull一下,
这样本地的仓库就是最新的了。
git push <remotename> <branch> 希望将那个分支推到哪个仓库中 
关于贮藏,其实这个命令我也没有用过。
场景:
当在一个分支上工作了一段时间,突然要切换到别的分支,但是又不想在当前分支做一次提交。

git stash    
保存当前分支的状态,并让当前分支变为干净状态。
当再次切换的时候,会回到原分支工作时的状态。

git stash list			查看贮藏列表

git stash apply			应用最近的一个贮藏

git stash apply +序号	应用所选的贮藏

git stash drop +序号		删除所选贮藏

git stash pop			立即应用贮藏,并从栈中弹出。

以上基本上就是git使用的所有基本命令,其实我也没有使用完,只使用了某一些命令。

 

Demo1(简单):

1、git clone <url>    
克隆远程仓库,如果是一个刚初始化的仓库,只有在一次commit之后才会出现master分支。

2、做一些文件的操作,
如果添加了一个文件,git add
如果修改了一个文件,git add 或者 git commit -a ...

3、commit完之后,直接就使用git push

 Demo2(进阶):

1、git clone <url>

2、git checkout -b <newbranchname>

3、在这个分支进行了一些操作之后,要合并到master分支。

4、先回到master分支,git checkout master

5、git merge <要合并的分支>

6、合并完成,删除合并分支。

7、git push

注1:
    创建一个新的分支,在新的分支中创建新的文件,要想合并到原分支,操作同上。
    合并原理可能不太相同,
    具体看:https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%9A%84%E6%96%B0%E5%BB%BA%E4%B8%8E%E5%90%88%E5%B9%B6
   
注2:
    当合并的过程中有同一个文件被两个分支进行了修改,
    这时候如果合并这两个分支会出现冲突,
    出现冲突文件在merge分支中手动修改冲突文件,然后git add 一下OK。   

变基操作:
    eg:两个分支,experiment、master

    git checkout experiment

    git rebase master //将experiment的前一个节点指向master

    git checkout master 

    git merge experiment //进行合并操作、快进合并。
    

Demo3(完整):

cd /d/ #转到你放代码的地址

mkdir used_car_project #新建文件夹

cd used_car_project/ #转到这个文件夹

git clone http://****/**2/used_car_model.git  #把主流程克隆下来

cd used_car_model/ #转到主流程文件夹里

git remote add upstream http://****/**1/used_car_model.git # **2 fork **1

git remote -v

git fetch upstream #上传前先跟upstream merge 一下

git pull upstream master #本地跟upstream一致

git checkout -b <newbranchname> 在这个分支上进行一些操作。

git commit -m "add data prepare script" #加到local repo

git push origin dataprepare #推到remote origin

如果有使用git管理工具,可以在管理页面发起pull request,也可以手动合并到master再进行push。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值