工作上该怎么使用Git?

工作上该怎么使用Git?_第1张图片

一、常用的Git命令

命令 说明
git init 初始化仓库
git config --global user.name "用户名" 配置用户名
git config --global user.email "邮箱地址" 配置邮箱
git config --list 查看所有配置信息;后拼 --show-origin:可查所在文件的路径
git clone https://github.com/.../... 下载拷贝远程仓库到本地仓库
git remote -v 查看远程仓库地址
git add . 添加当前目录下所有文件到暂存区
git add [File1] [File2] 添加指定文件到暂存区
git add [dir] 添加指定目录(包含其子目录)到暂存区
git commit 将暂存区文件添加到本地仓库;-m “提交信息”
git push 将本地仓库的中的文件推送至远程仓库
git fetch 从远程拉取最新commit id 到本地
git merge 合并远程和本地的代码
git pull 从远程获取最新版本并合并
git diff 比较暂存区和工作区的差异,拉去远程代码后到工作区,可比较与暂存区之间的差异
git branch 查看本地分支;-r :查看远程分支;-a:查看所有分支;-vv:查看本地关联的远程分支
git branch -m [当前分支名] [新分支名] 重命名分支
git branch -d 本地分支 删除本地分支;-D:强制删除本地分支
git push --delete 远程分支 删除远程分支
git branch --set-upstream-to= 远程分支 跟远程分支做关联
git push --set-upstream 分支名 把本地分支推送到远程并关联
git push -u 分支名 关联远程分支,相当于git push origin分支名 + git branch --set-upstream-to=origin/分支名
git checkout 远程存在的分支 切换到远程分支到本地工作区
git checkout -b 本地分支名 从当前分支创建并切换到此分支 等同于 git branch branchName + git chekout branchName
git checkout -b xxx(本地分支名) origin/xxx(远程分支名) 创建xxx本地分支并关联指定的远程分支(从远程分支创建新的本地分支并检出)
git log 查看所有的提交信息;-- oneline:单行显示
git reflog 查看所有分支的所有操作记录(包括已经被删除的commit记录和reset的操作,防止找回误删的提交)
git status 查看仓库当前的状态,显示有变更的文件,防止漏掉没添加的文件
git status --show-stash 查看工作区中是否有stash暂存的东西,有则提醒该工作区有几个stash
git stash 将工作区修改的内容临时保存(多用于保存修改切换分支)
git stash save "备注信息" 将工作区临时保存时添加备注信息
git stash pop 将临时保存的内容恢复
git reset HEAD 重写HEAD之后的暂存区,工作区不受影响,方便合并成一个commit
git revert 放弃指定提交的修改,生成新的提交,以前的commit记录都在,合入有问题的提交,移除有问题的提交而不影响后面的提交
git rebase 变基(重新定义起点)
git rebase -i /git rebase HEAD ~1 变基当前分支上的commit,多用于合并多个commit(HEAD~1)
git rebase --continue 继续rebase操作(解决完冲突后,git add . + git rebase --continue)
git rebase --abort 终止rebase操作
git add . && git commit --amend --edit 添加到暂存区并提交并不产生新的commit且编辑上次commit信息,--no-edit不重新编辑commit
git tag -a -m "标签信息" 打版本tag
git push -f 强制推送到远程
git cherry-pick 将一个分支上的提交转移到另一个分支上,后面加 --edit 打开编辑器

二、工作中的使用

1.创建目录并在该目录下使用 初始化仓库

2.需要拉取的远程仓库地址,使用 拉取到本地

3.切换到指定分支

4.运行无误后在此分支的基础上创建自己的分支,使用 ,此分支还没推送到远程

5.在自己的分支上开发,使用来把工作区的代码添加到暂存区

6.暂存区的代码提交到本地仓库,使用

7.在自己的本地分支上开发后需要推送到远程并与之关联,使用

8.可以通过 查看本地分支与远程的关联,确保关联正确

9.如果本地分支没有与远程关联,可以使用 来关联

10.每次push前先pull一下需要push的远程分支,确保本地仓库跟远程仓库对齐,每次pull之前先通过命令来检查一下工作区的状态,确保没有未提交到本地仓库的内容

11.如果此分支多人使用,每次提交前需要先拉取一下代码,关联后直接使用命令,未关联需要使用来拉取一下代码并解决冲突

12.pull 操作 也可以通过先使用 拉取最新代码,再通过使用 来解决本地代码与远程代码之间的冲突,解决完 提交

13.解决冲突也可以使用命令来进行,后面详解

14.开发过程中需要查看提交历史,可以使用/查看

15.需求开发完一个阶段需要合并成一个commit后提交,可以使用 然后add 、commit,记得在备份分支上做次操作,否则push不上去

16.合并成一个分支也可以通过使用/,进入编译器后在每个commitHash 前填入如下命令(通常是-f和-s)

pick:保留该commit(缩写:p)

reword:保留该commit,但我需要修改该commit的注释(缩写:r)

edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)

squash:将该commit和前一个commit合并(缩写:s)

fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)

exec:执行shell命令(缩写:x)

drop:我要丢弃该commit(缩写:d)

若冲突需要解冲突, ,出了问题想退回rebase操作之前,使用终止rebase

17.若操作出了问题,想看一下之前的操作的步骤,可使用查看历史记录

18.开发中想切别的分支但又不想提交当前工作区的代码,可使用临时保存起来,使用来恢复

19.开发中你push远程前想在修改点东西,但不想重新commit,可以使用来把当前改动添加到上一次的commit中

三、git rebase命令

3.1 通过git rebase与git merge 解决冲突的区别:

需要注意:如果提交存在于你的仓库之外,而别人可能基于这些提交进行开发,那么不要执行变基。 变基操作的实质是丢弃一些现有的提交,然后相应地新建一些内容一样但实际上不同的提交。 如果你已经将提交推送至某个仓库,而其他人也已经从该仓库拉取提交并进行了后续工作,此时如果你用git rebase命令重新整理了提交并再次推送,你的同伴因此将不得不再次将他们手头的工作与你的提交进行整合,如果接下来你还要拉取并整合他们修改过的提交,容易引起分支混乱

3.1.1在dev分支上使用git merge命令后的节点结构。

工作上该怎么使用Git?_第2张图片

3.1.2.在dev分支上使用git rebase 命令后的节点结构,可以整合分叉的历史。

将C4中的修改变基到C3上

git checkout experiment(检出测试分支)

git rebase master(把它变基到master分支上)

工作上该怎么使用Git?_第3张图片

master分支的快进合并

git checkout master

git merge experiment

工作上该怎么使用Git?_第4张图片

3.2 通过git rebase 合并多个commit(也可以使用git reset来合并多个提交)

git rebase -i HEAD~n(合并最近n条commit)/ git rebase -i commitHash(起始前一个commentHash)

进入编辑状态
工作上该怎么使用Git?_第5张图片

pick:保留该commit(缩写:p)

reword:保留该commit,但我需要修改该commit的注释(缩写:r)

edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)

squash:将该commit和前一个commit合并(缩写:s)

fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)

exec:执行shell命令(缩写:x)

drop:我要丢弃该commit(缩写:d)

修改每条commit开头的上面6种操作,可以缩写

解决冲突

git add .

git rebase --continue 继续执行

git rebase --abort 终止,回退到rebase 操作之前的状态

四、问题解决

现象一:游离状态

操作Git时终端出现这个信息 「HEAD detached」,则说明处于游离状态且无法commit,这时再切回之前的分支会发现代码可能会丢失。
解决办法(以dev分支为例):

  • 1.在当前游离状态下新建一个临时分支来保存游离状态下的提交 git checkout -b temp
  • 2.切换到开发分支 git checkout dev
  • 3.更新dev代码并对merge临时分支 git pull、git merge temp; git status 查看冲突并解决冲突;add、push等操作`
  • 4.删除临时分支 git branch -d temp;git log查看一下HEAD指向。

HEAD解释:相当于一个指针,通常指向当前所在分支的最新提交,当切换分支时,HEAD会指向切换后的分支的最新提交,如果切换到指定的某次提交,git checkout ,HEAD就会处于游离状态(detached状态)

你可能感兴趣的:(工作上该怎么使用Git?)