当前位置: 首页 > 工具软件 > git-ftp > 使用案例 >

git 常用命令(git status,git statsh,git commit,git pull,git merge,git push origin,git add,git checkout.)

乔伯寅
2023-12-01

Git

小总结

QA
git 中有几个区域,
各自的目的
磊 工作区:修改过的内容都会自动进入工作区
賂 暂存区:git add 可以将工作区的file添加到暂存区
雷 本地仓库:git commit -m ‘**’ 会将暂存区的file提交到本地仓库
4️⃣ 远程仓库:git push origin master(分支名称) 将本地仓库推到远程仓库
git status的作用显示工作区,暂存区,本地仓库,远程仓库之间的文件状态;如:
Your branch is up to date with ‘origin/master’ 本地仓库和远程保持一致
nothing to commit, working tree clean 工作区空,不会有文件提交到暂存区
Your branch is ahead of ‘origin/master’ by 1 commit. 表示本地仓库早于远程仓库
如此一来,我们可以使用git push 将本地的提交发布到远程仓库
Changes not staged for commit: 处于工作区,但是没有添加到暂存区
git stash 的作用;
或者使用 git stash save ‘*’
将工作区和暂存区的内容都藏起来,得到一个干净的(上一次提交)的工作区;
可以使用git stash apply 回到之前藏起来的状态
git checktout --的作用可以丢弃工作区的修改
git commit -a 的作用将工作区的所有修改,添加到暂存区,并且提交到本地仓库

Git 版本回退

# 我先后在gittest仓库下进行了两次提交,然后使用git log命令查看一下
$ git log
commit 74f261c789f1c3ad8665e3fb12f1e22b994841ee (HEAD -> master) #当前所在的版本
Author: 奔跑的bug <ifseayou@gmail.com>  # 作者
Date:   Thu Aug 29 13:44:07 2019 +0800 # 提交的时间

    add something to the reset.md  # 提交的时候comment

commit b4cf0842f1ad41b2844fb0bdf6e20ffced5b1f98
Author: 奔跑的bug <ifseayou@gmail.com>
Date:   Thu Aug 29 13:43:09 2019 +0800

    initial the reset.md
    
# 回退到初始的版本 ,使用以下的命令
$ git reset --hard b4cf0842f1ad41b2844fb0bdf6e20ffced5b1f98  
HEAD is now at b4cf084 initial the reset.md

# 查看当前是否回到了初始版本
$ git log
commit b4cf0842f1ad41b2844fb0bdf6e20ffced5b1f98 (HEAD -> master)
Author: 奔跑的bug<ifseayou@gmail.com>
Date:   Thu Aug 29 13:43:09 2019 +0800

    initial the reset.md

# 再回到未来版本,先查看一下未来版本的版本id
$ git reflog
b4cf084 (HEAD -> master) HEAD@{0}: reset: moving to b4cf0842f1ad41b2844fb0bdf6e20ffced5b1f98
74f261c HEAD@{1}: commit: add something to the reset.md  # 未来的版本
b4cf084 (HEAD -> master) HEAD@{2}: commit (initial): initial the reset.md

# 回到未来版本
$ git reset --hard 74f261c
HEAD is now at 74f261c add something to the reset.md

工作区和暂存区

  • 工作区就是你工作的目录,暂存区就是每次执行git add **文件存放的目标位置。

  • 第一次修改 -> git add -> 第二次修改 -> git add -> git commit ,如果没有git add到暂存区,是无法commit 到本地仓库的

丢掉工作区的修改

# 对于修改的文件,也就是处于工作区,可以选择将其添加到暂存区,也可以选择丢弃修改
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

  • 一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

  • 一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

远程仓库

Git是一款分布式版本控制系统,也即同一个Git仓库,可以分布到不同的机器上。最早,肯定只有一台机器有一个原始版本库,此后,别的机器可以“克隆”这个原始版本库,而且每台机器的版本库其实都是一样的,并没有主次之分。这里的别的机器就可以是:GitHub,这是一个非常nice的网站,可以作为你个人的远程仓库,如此一来你就能将你的代码托管到GitHub上。

建立本地机器和远程仓库的连接

由于本地的仓库和远程的仓库之间的数据传输是通过shh加密的,所以需要进行一点设置,将本地家目录的ssh的id_rsa_pub公钥保存到GitHub远程仓库,这样做的目的是确保每一次提交到代码都是你本人提交,而不是别人冒充你提交的。

如果你的机器上暂时没有.ssh目录的话,表名你还没有进行过shh的秘钥生成,所以需要到家目录执行一下的命令:

ssh-keygen -t rsa -C "ifseayou@gmail.com"

一路回车,然后在进入./ssh中复制公钥。添加到GitHub中(打开“Account settings”,“SSH Keys”页面)GitHub支持添加多个SSHkey,这表示你可以从多个终端向GitHub服务器提交代码。

提交

git init   # 初始化为本地仓库

git add . # 将该新增的文件添加到缓冲区(暂存区)

git status  # 查看文件有没有提交到缓冲区

git commit -m 'desc' # 将暂存区的文件提交到本地

git remote add origin git@github.com:*** # 将本地仓库和远端关联

git push origin master # 将暂存区的文件提交到远端

git status

该命令用来查看当前仓库的状态,git status 来显示一下是添加了新的文件,是否修改了文件,是否删除了文件,如下:

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   MySQL.md  # 红色
# 上面表示修改了MySQL.md文件,可以将该文件通过git add 的方式将这一改变提交到缓冲区。

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   MySQL.md  # 绿色

# 我们已经将修改的文件提交到了缓冲区,两次modify的颜色是不一样的,接下来需要使用git commit提交到仓库。

如上,我们对文件进行了修改,如果此时想要看看哪里做了修改,我们可以使用

git diff MySQL.md # 可以查看该文件被修改的位置

git stash

stash命令可用于临时保存和回复修改,可跨分支。
PS:在未add之前才能执行stash!!!!

git stash [save message]
# 保存,save为可选项,message为本次保存的注释
git stash list
# 所有保存的记录列表
git stash pop stash@{num}
# 恢复,num是可选项,通过git stash list可查看具体值。只能恢复一次
git stash apply stash@{num}
# 恢复,num是可选项,通过git stash list可查看具体值。可恢复多次
git stash drop stash@{num}
# 删除某个保存,num是可选项,通过git stash list可查看具体值
git stash clear
# 删除所有保存
git stash help # 获取帮助

pull request

如果我们要对开源项目提交代码的话,我们可以先fork一下这个项目,然后clone自己的项目到本地,然后修改这个项目,最后推到远端自己的项目下,最后在自己的项目页面发起pull request。

克隆

# 首先进入某个文件目录,然后输入以下的命令:
git clone git@github.com:ifseayou/tech-doc.git 

# 如此一来,当前clone下来的项目会自己成为一个本地的仓库并且和远端关联。

建仓姿势

method one

平时建笔记的时候,只需要一个分支即可,搞那么多分支根本没有必要。我认为比较好的创建方式为:

① 先在github上建好项目,该项目名要想好

② 在本地的任意一个目录,clone github的项目,clone下来的项目自带.git文件。

如:

# 先在github建立infra-doc

# 在markdowns文件夹下clone

method two

如果本地已经有了项目tech-doc,想要备份一下,需要在github建立好项目名tech-doc

# 在tech-doc下执行
git init 
git remote add origin url

# 然后就可以提交代码了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oqHdhYQU-1622942655170)(img/md/2.png)]

gitignore文件

有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们忽略文件的原则是:

  • 忽略操作系统自动生成的文件,比如缩略图等;
  • 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
  • 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。

分支

# 查看分支
git branch

# 创建分支
git branch dev(分支名)

# 切换分支
git checkout dev

# 创建分支并切换
git checkout -b dev

# 合并某分支到当前的分支,比如当前在dev分支,下面的命令将master分支合并到当前dev分支
git merge master

# git push

# 分支删除
git branch -d dev

拉取

# 拉取某分支最新代码 
git pull origin master

多人协作开发:commit + pull + push

多人协作开发来讲,基本上多数人是从远程clone 一个项目到本地,各自开发各自的模块,如果现在自己开发完成之后,就把自己代码提交**commit到本地,然后在从远程拉取pull最新的代码(因为可能有其他的开发小伙伴提交了新的代码),此时gitbash会提示请求合并,填写备注信息之后,在将代同步到远程仓库push**

总结起来就是:

git commit
git pull # 如果远程仓库有变化,会有编辑提示merge信息要填写
git push

dev和master的协同操作

就我个人的习惯来说,我会一直在dev上进行提交,在提交之后,回到master分支,然后在master分支合并dev分支,然后在master分支上提交到远程。

第一次失恋的时候,我把自己关在屋里学会了Python;第二次失恋的时候,我每天都去自习室学会了Java;第三次失恋的时候我玩命的刷了几百道SQL题目;第四次失恋的的时候,学习了大数据的所有基础框架;期待第五次失恋ing.

谈恋爱真难,还是写bug 简单。

 类似资料: