[ Git ] 工作原理与常用命令

原文地址:
https://blog.csdn.net/web_csdn_share/article/details/79243308

原理图

在这里插入图片描述
Workspace:工作区
Index / Stage:暂存区
Repository:仓库区(或本地仓库)
Remote:远程仓库

工作区间: 即我们创建的工程文件, 在编辑器可直观显示;

缓存区: 只能通过git GUI或git shell 窗口显示,提交代码、解决冲突的中转站;

本地仓库: 只能在git shell 窗口显示,连接本地代码跟远程代码的枢纽,不能联网时本地代码可先提交至该处;

远程仓库: 即保存我们代码的服务器,本文以公共版本控制系统:github为例,登录github账号后可直观显示;

接下来, 我们以三个实际操作的例子讲解git的日常,代码如何在上述4个区域流动。
在这里插入图片描述

一个正常的代码推送流程:
指令解释:

git init 表示在当前的项目目录中生成本地的git管理;

git add README.md 将“README.md”文件保存至缓存区,实际开发中一般使用 git add -A,使用-A:将新增、删除、修改的文件改动全保存至缓存区;

git commit -m "first commit" 将代码从缓存区保存至本地仓库,实际开发中一般使用git commit -am "说明的文字",使用 -a:如果没文件更改操作(增、删、改名)就可以省略git add指令;

git remote add origin https://github.com/wteam-xq/testGit.git将本地仓库与指定的远程仓库创建 联系;

push -u origin master 将本地仓库代码推送至远程仓库,实际开发中 该指令后需要输入github 账号以及密码。(首次提交注意别遗漏-u指定默认主机)

以上指令正常执行后, 本地仓库的代码就提交到远程仓库了:

分支

作用命令
列出所有本地分支$ git branch
列出所有远程分支$ git branch -r
列出所有本地分支和远程分支$ git branch -a
新建一个分支,但依然停留在当前分支$ git branch [branch-name]
新建一个分支,并切换到该分支$ git checkout -b [branch]
新建一个分支,指向指定commit$ git branch [branch] [commit]
新建一个分支,与指定的远程分支建立追踪关系$ git branch --track [branch] [remote-branch]
切换到指定分支,并更新工作区$ git checkout [branch-name]
切换到上一个分支$ git checkout -
建立追踪关系,在现有分支与指定的远程分支之间$ git branch --set-upstream [branch] [remote-branch]
合并指定分支到当前分支$ git merge [branch]
选择一个commit,合并进当前分支$ git cherry-pick [commit]
删除分支$ git branch -d [branch-name]
删除远程分支$ git push origin --delete [branch-name]
删除远程分支$ git branch -dr [remote/branch]

注:合并分支的一个常用操作: git merge --no-ff release-1.2 其中 --no-ff
参数在原文链接中有详细解释,以及合并分支的具体场景

添加删除

作用命令
添加指定文件到暂存区$ git add [file1] [file2] …
添加指定目录到暂存区,包括子目录$ git add [dir]
添加当前目录的所有文件到暂存区$ git add .
添加每个变化前,都会要求确认
对于同一个文件的多处变化,可以实现分次提交
$ git add -p
删除工作区文件,并且将这次删除放入暂存区$ git rm [file1] [file2] …
停止追踪指定文件,但该文件会保留在工作区$ git rm --cached [file]
改名文件,并且将这个改名放入暂存区$ git mv [file-original] [file-renamed]

(日常使用中会用git status看看是否有文件需要git add):

提交

提交是只将代码提交到本地代码仓库区。

作用命令
提交暂存区到仓库区$ git commit -m [message]
提交暂存区的指定文件到仓库区$ git commit [file1] [file2] … -m [message]
提交工作区自上次commit之后的变化,直接到仓库区$ git commit -a
提交时显示所有diff信息$ git commit -v
使用一次新的commit,替代上一次提交。
如果代码没有任何新变化,则用来改写上一次commit的提交信息
$ git commit --amend -m [message]
重做上一次commit,并包括指定文件的新变化$ git commit --amend [file1] [file2] …

git -commit -m 与git commit -am的区别

注意:git -commit -m 与git commit -am的区别。 在此之前,你要理解,什么是文件的跟踪状态。

  • 在项目文件夹中新增一个文件如’a.txt’时,该文件处于未跟踪状态(untracked)。未跟踪状态的文件是无法提交的
  • 使用git add a.txt,使其变成已跟踪状态(tracked)
  • 使用git commit -m 'add a.txt’就可以顺利提交了
  • 由此可见git add filename 会将未跟踪文件设置为开始跟踪。但是git add filename会根据文件的不同状态,做不同的处理。如果 a.txt 已经被设置跟踪了,但是经过了一些修改,这些修改时不能直接commit的,因为它们没有暂存,必须再次调用git add a.txt 将已跟踪文件添加到暂存,才能commit。
  • 而 git commit -am正是帮我们默认自动的a做了dd了这一步。

总结

这两个命令的区别的关键就是git add命令

git add命令是个多功能命令,根据目标文件的状态不同,此命令的效果也不同:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等

我们需要用git add命令来跟踪新文件,但如果使用git commit -am可以省略使用git add命令将已跟踪文件放到暂存区的功能

git add 在解决冲突时使用
https://blog.csdn.net/yangstarss/article/details/80691775

解决冲突后提交本地修改的思路大概如下:
将本地修改的代码放在缓存区, 然后从远程仓库拉取最新代码,拉取成功后再从缓存区将修改的代码取出, 这样最新代码跟本地修改的代码就会混杂在一起, 手工解决冲突后, 提交解决冲突后的代码。

远程

作用命令
下载远程仓库的所有变动$ git fetch [remote]
显示所有远程仓库$ git remote -v
取回远程仓库的变化,并与本地分支合并$ git pull [remote] [branch]
上传本地指定分支到远程仓库$ git push [remote] [branch]
强行推送当前分支到远程仓库,即使有冲突$ git push [remote] --force
推送所有分支到远程仓库$ git push [remote] --all

git pull命令相当于git fetch+ git merge命令。git fetch用于获取远程某个仓库的某个分支,然后git merge会将拉取的分支与本地分支进行合并。
如果你想拉取远程仓库的某个分支,那么使用git pull <repository> <branch>命令。例如下面的命令会拉取远程develop分支到本地。

场景一

我在本地修改了代码时,其他人又推送了最新的代码在远程仓库,这时我想保留本地的一些修改,又想拉取最新的代码。怎么办呢?

  • git stash 将本地代码保存到暂存区
  • git pull
  • git stash pop 弹出暂存区,然后解决冲突代码

场景二
让本地分支与远程分支关联
git branch --set-upstream-to=origin/dev

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_popo_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值