我正在参加「掘金·启航计划」
背景
作为程序员不可避免的,在工作中会使用到git 来对代码仓库进行管理。因为不论是实习生还是老油条们在入职一家新的公司的时候,不可避免的那么首先总会第一件事情就是配置开发环境,然后克隆下载git上的代码库进行熟悉;
工作图
-
working directory: 工作区,开发者直接修改的本地代码树;
-
staging area:暂存区,用于临时保存开发者的改动;
-
repository:本地仓库,安全存放数据的位置,这里有开发者提交所有版本的数据。其中HEAD指向最新放入仓库的版本
以上三个区域又是存储在我们各自工作的本地PC上,git通过.git/目录下的文件进行记录管理
-
remote repository: 远程仓库,托管代码的服务器 团队都能访问的公告远程服务器(如github)
创建和克隆
- 本地初始化仓库并关联推送到远程对应的仓库
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 // 将本地的分支推送到远程
-
远程创建本地直接拉取
- SSH: 在使用SSH进行克隆之前需要进行SSH的配置,具体配置可参考 :Github链接
-
git clone ``git@github.com``:xxxx/git_test.git - HTTPS
-
git clone ``https://github.com/xxxxx/git_test.git
初次拉取的时候会提示输入密码,这个可以进行配置本地的默认账号密码
开发的时候需要这么做?
-
只存在新增文件时
-
开发完成之后,如果有新增文件那么需要进行以下操作:
git add -A或者git add xxx.tsx目的是将新增的文件提交到暂存区,
—A将所有的新增文件都推到暂存区,指定文件名就只推该文件到暂存区; -
之后将暂存区文件推送到本地分支;
git commit -m 'xxxx' -
将本地分支推送到远程
git push
-
-
只是修改了文件
git commit -a -m 'xxxxxx'git push -
新增了文件和修改了文件
git add -A
git commit -m 'xxxxxx'
git push
commit -a -m 和 -m 的区别:当修改了文件的内容之后, 只是-m 是无法提交最新版本的内容的,提交的只是最开始的文件内容;
要提交新版本内容,则需要使用git add -A或者git add xxx,将新版本的文件放到staged暂存区,然后才能使用git commit -m进行提交
分支操作
-
新建分支
git branch 新分支名:在主分支下创建新的分支 -
修改分支名称
git branch -m 旧的名称 新的名称 -
切换分支
git checkout 新分支名: 切换到该分支 -
推送本地分支到远程
git push --set-upstream origin 分支名
推送回退
-
回退版本
git reset --hard HEAD^: 回到上一个提交
git reset --hard commit_id: 回到指定的版本
可以通过git log查看提交的commit 记录 -
合并推送的消息
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=>wqpick xxx pick xxx // 改成一下,注意第一个需要进行保留不能进行s合并 pick xxx s xxxx
-
修改之后会出现新的文件提示: 这个时候是刚才我们合并了一个commit,这个时候可以进行修改commit的信息等,或者保持这样也行。
然后进行提交推送
1. `git push -f`: 记得加-f 强制推送到远程,不要去pull 不然就白改了。 1. 当然在操作的时候需要注意,远程的分支不能有改动,不然最后强推容易将别人提交的信息给覆盖,建议新拉分支操作完成之后再合并过去;
-
查看历史提交
git log
Pull
git pull: 拉取远端的分支代码合并到本地
git fetch:拉取远端的数据到本地仓库,并不会进行合并
-
git pull和git pull --rebase当新建了分支之后, 分支的代码有两种合并的情况, merge 和 rebase
merge:
rebase:
代码临时保存在git栈中
有的时候我们开发到一半了,但是另外的分支或者线上的版本有改动,但是又不想把现在的代码提交了;这个时候我们就可以将当前的代码改动暂存起来;
-
保存
git stash或者git stash -m 'xxx': 将改动的暂存起来,加上-m 是备注下当前这次保存 -
恢复暂存的信息到分支
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 --list或 git 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密码