查看当前状态
#可以查看当前的branch和当前branch修改的文件状态
git status
查看提交的日志信息
#以行的形式打印出来
git log --pretty=oneline
提交代码到暂存区
#添加当前目录下,所有文件到暂存区
git add .
#添加当前目录下所有文件,并添加提交信息
git add . -m "commit all files"
从暂存区撤回提交
#撤回所有暂存区的文件,保留修改
git reset
#撤销所有已经add的文件
git reset HEAD .
#撤销某个文件或文件夹
git reset HEAD --fileName
使用stash保存文件(切换到别的文件,但要保留本分支的修改)
#暂存还没有提交的代码
git stash
#暂存时,添加说明信息
git stash save "save message"
#查看保存的stash列表
git stash list
#使用第一个stash(不会删除)
git stash apply
#使用第一个stash(会删除)
git stash pop
#使用指定的stash(不会删除)
git stash apply <stash id> #如:git stash apply stash@{1}
#查看stash中的内容[修改了哪些文件的详细信息]
git stash show
#删除第一个stash
git stash drop
#删除指定的stash
git stash drop <stash id> #如: git stash drop stash@{1}
#清空所有的stash
git stash clear
撤销提交【不保留代码】
#查看历史
git log
#回退本地的代码到某个branch或者commit id
git reset --hard version
#如:回退到上一次提交,
git reset --hard HEAD^
#回退之后,要同步本地与远程(要强制推送到远端)
git push --force
撤销提交【保留代码】
#使用git reset --soft
#撤销上一次的提交,并保留
git reset --soft HEAD^1
#撤销最近两次的提交,
git reset --soft HEAD^2
#如果只撤回某次的提交,[需要用commit id]
git reset --soft commit_id
#如果还没有过,可以直接push。如果已经push过,使用如下命令,强制推送
git push -f
revert 撤销中间的某次提交【不会保留代码】
# git revert commit_id 可能会有代码冲突,需要手动解决。
#假如有五次提交,想要撤销中间第二次提交,不能用git reset --hard[此命令会把已经提交的文件的修改内容,全部删除掉]
#要使用如下命令:
git revert commit_id
#如果此commit_id是合并过来的,可以用-m 参数
git revert -m commit_id
#如果想撤销多个commit_id
git revert --no-commit commit1 ... commit2
#最后,push到远程仓库[不需要强制推送]
git push
reset与revert的区别
#revert是放弃指定提交的修改,但是会生成一次新的提交,需要填写提交注释,以前的历史记录都在;
#reset是指将HEAD指针指到指定提交,历史记录中不会出现放弃的提交记录。
#reset --soft会保留代码,但revert不会保留代码
撤销正在进行的merging
#撤销merging
git merge --abort
删除本地多余的分支(远程已经合并的分支)
#方法一:删除本地多余分支(2条命令) 切到master分支
git remote show origin #查看本地分支和追踪情况
git remote prune origin #同步删除本地这些分支
#方法二:使用管道和xargs命令删除
git branch --merged |grep -v "\*" |grep -v "release" | xargs git branch -d
#方法三:写成shell脚本执行
#!/bin/bash
branches=`git branch --merged |grep -v "\*" | grep -v "release"`; #获取分支名
echo $branches;
for branch in $branches
do
`git branch -d $branch`;
echo delete branch $branch;
done;
忽略不需要提交的文件
#方法一:
在.gitignore文件中添加
#方法二:
.gitignore只能忽略那些原来被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。
正确的做法是在每个clone下来的仓库中手动设置不要检查特定文件的更改情况
git update-index --assume-unchanged File #File表示要忽略的文件
如果要还原的话,使用命令:
git update-index --no-assume-unchanged File
#方法三:
修改.git/info/exclude #亲测,去除了idea中.flattend-pom.xml文件
同一个项目查看不同分支的代码
#利用worktree来创建新的目录,把对应的分支的代码全部放入这个目录中
#1.首先要切分支到自己想要看到的其他分支的分支
#如:你想在featrue分支中,看到feature-1分支的代;就切换分支到feature-1分支
#2.首先添加对应的分支到worktree中
git worktree add 目录 分支名称
#3. 现在所在区域为项目根目录,可以直接使用分支名称作为新建的目录名称
git worktree add feature-1 feature-1 #第一个分支名称为目录名称
#4.使用完之后,删除掉worktree的分支
git worktree remove 分支名称
关联分支失败,解决方案
#当使用git pull发现如下的错误
#当前分支没有跟踪信息,
#。。。
#如果你想要为此分支创建跟踪信息,可以执行:
#git branch --set-upstream-to = <远程>/<分支> <本地分支>
#当使用此命令,依然报错。
#需要检查.git/config文件的内容,因为缺少remote等配置信息
#需要在别的目录下,git clone仓库,把.git/config文件的内容复制过来。
#git pull需要merge代码的话,
使用git pull --rebase来变基