Git分支版本管理笔记

1. 基本设置

设置git用户名、密码、邮箱的配置
$ git config user.name "liangfh8006"
$ git config user.password "123"
$ git config user.email "1372316821@qq.com"

查看git配置信息
$ git config --list

查看或设置全局配置:加上--global参数
$ git config --global user.name "liangfh8006"

删除git用户名、密码、邮箱的配置
$ git config --unset user.name "liangfh8006"

2. 修改代码并compare

查看当前修改和上次commit后的区别
git diff

已经提交过,又想修改某些文件,但是想放到同一次的commit事件中:
git add .
git commit --amend --no-edit

3. 根据已有分支创建新分支(不包含历史commit记录)

# 基于当前分支创建一个独立的分支new_branch
git checkout --orphan new_branch
# 添加所有文件变化至暂存空间
git add -A
# 提交并添加提交记录
git commit -am "commit message"

4. 回到过去和未来

# 回到某个历史commit_id
git reset --hard 77730b6
# 回到前k步
git reset --hard HEAD~k  # k为正整数,表示向上走k步
# 显示包括未来的所有commit_id
git reflog

如果在当前分支下的某个commit_id节点重新add & commit后,git会自动使用一个新的commit_id覆盖当前分支该commit_id之后的所有记录。

5. 显示分支图

# 显示当前分支版本图
git log --oneline --graph
# 显示所有分支版本图
git log --oneline --graph --all

6. 显示所有冲突文件

git status
或者
git diff --name-only --diff-filter=U

7. 合并冲突

7.1 merge分支冲突

# 直接merge
git checkout master
git merge dev
# 若想保留merge信息可以使用
git merge --no-ff -m "merge info 1" dev
# 如有冲突要手动解决冲突,然后
git commit -am "merge info 2: solve conflict"

7.2 rebase分支冲突(比较危险,建议少用)

# 将dev分支所有节点接到master后面
git checkout dev
git rebase master

8. stash暂存区

8.1 stash使用

将代码保存至暂存区,然后可以做其他事情
$ git stash
做完其他事情,回来后恢复代码继续happy coding
$ git stash pop

查看现有stash
$ git stash list
移除stash
$ git stash drop stash@{0}

删除所有缓存的stash
$ git stash clear

8.2 从stash创建分支

$ git stash branch testchanges

8.3 只提交部分修改的文件

1) git status -s 查看仓库状态
2) git add src/components/文件名 添加需要提交的文件名(加路径--参考git status 打印出来的文件路径)
3) git stash -u -k 忽略其他文件,把现修改的隐藏起来,这样提交的时候就不会提交未被add的文件
4) git commit -m "哪里做了修改可写入..."
5) git pull 拉取合并
6) git push 推送到远程仓库
7) git stash pop 恢复之前忽略的文件(非常重要的一步)

9. checkout操作

参考链接:https://2fz1.me/2018/02/09/gitmerge/

除了checkout分支外,还可以对文件单独操作:

恢复到最近一次git操作过的状态,比如刚刚add或commit时的状态
$ git checkout --filename
如果修改过但没进行git操作执行该命令后修改会消失

恢复指定分支文件内容
比如此时在dev分支,获取master分支的文件并更新到工作区:
$ git checkout master a.txt b.txt

从其他分支merge个别文件:
### 将develop分支的个别文件merge到master分支 ###
git checkout master  // 先切换到master分支
git checkout -b master_temp // 从master切一个新的分支
git merge develop // 在 master_temp 上 merge develop 分支, 如果有冲突,解决下冲突,然后 commit 掉
git checkout master // 切回master
git checkout master_temp function1.js function2.js // 合并临时分支上的 function1.js, function2.js

10. git从远程分支拉取到本地并创建

情况一:目前本地还没拉代码,直接拉分支代码
git clone -b ac_branch origin/ac_branch
情况二:本地已经拉取了代码,想拉取远程某一分支的代码到本地
git checkout -b ac_branch origin/ac_branch   拉取远程分支到本地(方式一)
git fetch origin ac_branch_remote:ac_branch_local  拉取远程分支到本地(方式二)
git pull origin ac_branch_remote:ac_branch_local  拉取远程分支到本地(方式三)

11. git推送本地分支到远程分支

git push origin ac_branch_local:ac_branch_remote

12. 删除远程分支

git push origin :ac_branch
git push origin --delete ac_branch

13. revert、reset、rebase区别

13.1 revert使用

revert会回滚某个commit并在当前节点生成新的commit节点:

撤销第前k次提交
git revert HEAD~k
撤销具体某个提交
git revert commit_id

13.2 reset使用

切换到前k个commit节点:

git reset --soft HEAD^k
git reset --soft HEAD~k

–soft 撤销commit,不撤销add,不删除工作空间的改动代码

–mixed(默认) 撤销commit,撤销add,不删除工作空间的改动代码

–hard 撤销commit,撤销add,删除工作空间的改动代码

13.3 rebase使用

# 将dev分支所有节点接到master后面
$ git checkout dev
$ git rebase master

# 将近k次commit合并为1个新的commit
$ git rebase -i HEAD~k
参数说明:
pick:保留该commit(缩写:p)
reword:保留该commit,但我需要修改该commit的注释(缩写:r)
edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
squash:将该commit和前一个commit合并(缩写:s)
fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
exec:执行shell命令(缩写:x)
drop:我要丢弃该commit(缩写:d)

有冲突时:
用”git add“命令去更新这些内容的索引(index)
继续
$ git rebase --continue
放弃
$ git rebase --abort

13.4 cherry-pick使用

# 将指定的commit_id应用于其他分支,类似于简化版的rebase:
$ git cherry-pick commit_id

# 将0safsd节点复制追加到master分支上:
$ git checkout master
$ git cherry-pick 0safsd
转移从A到B(含B不含A)的多个提交
$ git cherry-pick A..B 

# 如果冲突
第一步将修改的文件重新加入暂存区(git add .)
继续
git cherry-pick --continue
放弃
git cherry-pick --abort

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦