- 新建或删除分支
# 查看本地分支
git branch
# 创建分支
git branch test
# 切换分支
git checkout test
# 新建并切换到一个分支
git checkout -b test
# 强制取代本地分支
git fetch --all && git reset --hard origin/master && git pull
# 删除分支
git branch -d test
# 删除远程分支
git push origin --delete testgit
- 撤销文件修改
# 撤销工作区修改,回到最近一次add或commit的状态
git checkout -- 文件名
git checkout . # 撤销所有文件修改
# 撤销暂存区修改(如果当前分支一次commit都没有)
git rm --cached 文件名 # ,用这个
# 撤销暂存区修改(如果当前分支已经有commit记录了)
git reset HEAD 文件名 # 先用这个让暂存区的内容回到与上次commit的内容一样,工作区不变
git chekcout -- file # 再用这个撤销工作区的修改
- 删除文件
git rm -r -f - 文件名
# 列出要删除的文件,一般是新增的文件
git clean -fd -n
# 删除刚刚列出的文件和目录
git clean -fd
- 提交代码时解决冲突
git fetch master
git rebase master
# 上面两个可以合为git pull --rebase master
解决冲突ing
git add .
git rebase --continue
git push
git rebase master mywork = git checkout mywork + git rebase master
因为mywork是我们基于以前的master在修改,在我们修改的过程中,origin也在修改。这个命令就是把mywork里面的改动,重新添加到现在的master里面 ,即得到了 新master+ (mywork - 旧master),这样我们就完成了变基,把我们修改的基础从旧origin变成了新orgin
我们说的mywork内容是以最近一次commit记录为准,rebase一般在commit之后使用
输入这个命令后可能会用冲突,需要我们手动解决冲突,解决冲突后git add . ,然后git rebase --continue,然后push,不需要commit
- pull
git pull = git fetch + git merge
git pull --rebase = git fetch + git rebase
- fetch
git fetch --all
- commit
git commit -m "message"
# add之后,直接把这次的提交合并到上一次,没有新的提交记录
git commit --amend
- push
git push // 保存到远程数据库该分支
git push origin test // 保存到远程的test分支
git push origin test:awesomebranch // 远程和本地分支名字不一样
- reset
HEAD指向当前branch最顶端的一个commit,也就是该分支最近一次commit后的节点
命令 | 修改内容状态 | 工作区变化 | 暂存区变化 | HEAD变化 |
---|---|---|---|---|
git reset soft | 修改内容还在,变成已add的状态 | 没变 | 没变 | 变了 |
git reset mixed 或git rest | 修改内容还在,变成未add的状态 | 没变 | 变了 | 变了 |
git hard | 修改内容丢失 | 变了 | 变了 | 变了 |
这些命令后面可以跟HEAD或[commitid],commitid可以通过git log查看
- rebase
rebase可以合并当前分支的多个commit
# 表示要修改后两次的提交
git rebase -i HEAD~2
# 然后会显示下面的内容:
pick 8b485bb add 4
pick a75ed74 add 5
# Rebase 63ce9fb..a75ed74 onto 63ce9fb (2 command(s))
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
~
~
~
# 然后把第二个pick换成fixup然后保存退出就可以了,这是把第二个提交信息也删,如果不想删就是把pick替换为squash,然后重新修改合并之后的提交信息(默认是合并),然后保存推出
# 如果是想要修改commit信息,就把对应的pick提交改成r
r 8b485bb add 4
pick a75ed74 add 5
# 然后保存退出,就会进入修改界面,修改之后再保存退出
rebase可以解决分叉合并,具体用法就是上面说的提交时解决冲突,要注意只对尚未推送或未分享给别人的本地修改执行变基操作清理历史, 从不对已推送至别处的提交执行变基操作
idea同时打开两个分支的目录
-
git worktree 目录 分支名
例如 git worktree add …/test test -
清除worktree
例如 git worktree remove test
stash用法
(1)git stash save “save message” : 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。
(2)git stash list :查看stash了哪些存储
(3)git stash show :显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}
(4)git stash show -p : 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num} -p ,比如第二个:git stash show stash@{1} -p
(5)git stash apply :应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1}
(6)git stash pop :命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}
(7)git stash drop stash@{KaTeX parse error: Expected 'EOF', got '}' at position 4: num}̲ :丢弃stash@{num}存储,从列表中删除这个存储
(8)git stash clear :删除所有缓存的stash