Git 在工作中有这些应该就够用啦吧🤔

275 阅读5分钟

我正在参加「掘金·启航计划」

背景

作为程序员不可避免的,在工作中会使用到git 来对代码仓库进行管理。因为不论是实习生还是老油条们在入职一家新的公司的时候,不可避免的那么首先总会第一件事情就是配置开发环境,然后克隆下载git上的代码库进行熟悉;

工作图

image.png

  • working directory: 工作区,开发者直接修改的本地代码树;

  • staging area:暂存区,用于临时保存开发者的改动;

  • repository:本地仓库,安全存放数据的位置,这里有开发者提交所有版本的数据。其中HEAD指向最新放入仓库的版本

以上三个区域又是存储在我们各自工作的本地PC上,git通过.git/目录下的文件进行记录管理

  • remote repository: 远程仓库,托管代码的服务器 团队都能访问的公告远程服务器(如github)

创建和克隆

  1. 本地初始化仓库并关联推送到远程对应的仓库
echo "# git_test" >> README.md // 创建文件 README.md 文件
git init // 初始化仓库
git add README.md // git 添加指定的文件(README.md)到缓存区
git commit -m "first commit" // 提交暂存区的文件到本地仓库并备注本次提交
git remote add origin 远程仓库地址 // 将本地的git仓库和远程的仓库关联起来
git push -u origin master // 将本地的分支推送到远程
  1. 远程创建本地直接拉取

    1. SSH: 在使用SSH进行克隆之前需要进行SSH的配置,具体配置可参考 :Github链接
    2.    git clone ``git@github.com``:xxxx/git_test.git
    3. HTTPS
    4.    git clone ``https://github.com/xxxxx/git_test.git

初次拉取的时候会提示输入密码,这个可以进行配置本地的默认账号密码

开发的时候需要这么做?

  1. 只存在新增文件时

    • 开发完成之后,如果有新增文件那么需要进行以下操作:

      git add -A 或者 git add xxx.tsx

      目的是将新增的文件提交到暂存区,—A 将所有的新增文件都推到暂存区,指定文件名就只推该文件到暂存区;

    • 之后将暂存区文件推送到本地分支;

      git commit -m 'xxxx'

    • 将本地分支推送到远程

      git push

  1. 只是修改了文件

    git commit -a -m 'xxxxxx'

    git push

  2. 新增了文件和修改了文件

    git add -A
    git commit -m 'xxxxxx'
    git push

commit -a -m 和 -m 的区别:当修改了文件的内容之后, 只是-m 是无法提交最新版本的内容的,提交的只是最开始的文件内容;

要提交新版本内容,则需要使用git add -A或者git add xxx,将新版本的文件放到staged暂存区,然后才能使用git commit -m进行提交

分支操作

  1. 新建分支

    git branch 新分支名:在主分支下创建新的分支

  2. 修改分支名称

    git branch -m 旧的名称 新的名称

  3. 切换分支

    git checkout 新分支名: 切换到该分支

  4. 推送本地分支到远程

    git push --set-upstream origin 分支名

推送回退

  1. 回退版本

    git reset --hard HEAD^: 回到上一个提交
    git reset --hard commit_id: 回到指定的版本
    可以通过 git log 查看提交的commit 记录

  2. 合并推送的消息

    git rebase -i HEAD~n 合并最新的提交前n个commit 提交,比如你要合并5个就写5
    git rebase -i commit_startId~commit_endId : 合并对应的提交记录之间的commit

    执行代码之后会看到一个这样的界面(不要慌):箭头指向的为你要合并的代码,下面的都是注释的提示,提示你怎么改

    p(pick) : 使用当前的commit
    r(reword): 使用当前的commit 但是修改commit的备注也就是 commit -m 时候的信息
    s(squash): 使用这个commit 但是将它往前合并
    剩余的自己了解吧😄
    vim进行编辑=> i => 修改 =>esc => wq

    pick xxx
    pick xxx
    // 改成一下,注意第一个需要进行保留不能进行s合并
    pick xxx
    s xxxx
    
  • 修改之后会出现新的文件提示: 这个时候是刚才我们合并了一个commit,这个时候可以进行修改commit的信息等,或者保持这样也行。

    然后进行提交推送

    1.      `git push -f`: 记得加-f 强制推送到远程,不要去pull 不然就白改了。
    1.  当然在操作的时候需要注意,远程的分支不能有改动,不然最后强推容易将别人提交的信息给覆盖,建议新拉分支操作完成之后再合并过去;
    
  1. 查看历史提交

    git log

Pull

  1. git pull: 拉取远端的分支代码合并到本地
  1. git fetch:拉取远端的数据到本地仓库,并不会进行合并
  1. git pullgit pull --rebase 当新建了分支之后, 分支的代码有两种合并的情况, merge 和 rebase


    merge:

    rebase:

代码临时保存在git栈中

有的时候我们开发到一半了,但是另外的分支或者线上的版本有改动,但是又不想把现在的代码提交了;这个时候我们就可以将当前的代码改动暂存起来;

  1. 保存

    git stash 或者 git stash -m 'xxx': 将改动的暂存起来,加上-m 是备注下当前这次保存

  2. 恢复暂存的信息到分支

    git stash list: 查看栈中的信息

    git stash show stash@{0}: 显示栈中的一条信息

    git stash drop stash@{0}: 删除栈中的信息

    git stash pop stash@{0}git stash pop: 从Git栈中检出一条记录,并将它从栈中移除(如果stash@{0}不添加就是最新的一条)

    git stash apply stash@{0}git stash apply: 从Git栈中检出一条记录,但不从栈中移除

    git stash clear: 清空所有的记录

设置默认的配置

加了global 为全局的配置

git config --listgit config --list --global : 查看默认的本地配置

git config --global init.defaultBranch <name> : 配置本地默认git init 生成的时候的分支名
git config --global user.name <name>: 配置名称,在你提交的时候别人查看信息的时候会显示这个代码由谁提交的
git config --global user.email <email>: 配置对应的git 的邮箱
git config --global user.password <pwd>: 配置对应的git密码