1.提交代码
git add filename
git pull
git commit -m "说明"
git push
2.删除文件
2.1新写一个文件,并提交到暂存区
先删除工作区中的文件,在删除暂存区的文件
rm 文件名
git rm 文件名
2.2同时删除工作区和暂存区中的文件
git rm -f 文件名
2.3删除暂存区的文件,不删除工作区的文件
git rm --cached 文件名
3.解决冲突
如果add后,再pull时出现冲突,先在本地代码中解决掉冲突,再add,然后再pull,commit,push
4.查看git路径
git remote -v
5.恢复本地文件
恢复到最后一次提交的改动:
git checkout -- + 需要恢复的文件名
但是,需要注意的是,如果该文件已经 add 到暂存队列中,上面的命令就不灵光喽
需要先让这个文件取消暂存:
git reset HEAD --
+ 需要取消暂存的文件名
然后再使用checkout 命令。
6.查看远程仓库上的所有分支
git remote show origin
7.指定单个文件回退到指定版本
对于某个git控制下的文件进行了修改,但是改的不满意,想退回到改之前的版本。假定该文件为 src/main/main.c
解决方法:
第一步: 在命令行中输入 git log src/main/main.c 得到该文件的commit 历史。 会得到类似下面的界面
第二步: 复制需要回退版本的hash,在此假设我们回退到 d98a0f565804ba639ba46d6e4295d4f787ff2949 ,则复制该序列即可
第三步:checkout 对应版本。格式为 git checkout <hash> <filename>, 在此即为命令行中输入 git checkout d98a0f565804ba639ba46d6e4295d4f787ff2949 src/main/main.c
第四步: commit checkout下来的版本。 如: git commit -m "revert to previous version"
注意: 第三步中不要忘记加 文件属性,即src/main/main.c
8.git代码库回滚
git代码库回滚: 指的是将代码库某分支退回到以前的某个commit id
【本地代码库回滚】:
git reset --hard commit-id :回滚到commit-id,讲commit-id之后提交的commit都去除
git reset --hard HEAD~3:将最近3次的提交回滚
【远程代码库回滚】:
这个是重点要说的内容,过程比本地回滚要复杂
应用场景:自动部署系统发布后发现问题,需要回滚到某一个commit,再重新发布
原理:先将本地分支退回到某个commit,删除远程分支,再重新push本地分支
操作步骤:
1、git checkout the_branch
2、git pull
3、git branch the_branch_backup //备份一下这个分支当前的情况
4、git reset --hard the_commit_id //把the_branch本地回滚到the_commit_id
5、git push origin :the_branch //删除远程 the_branch
6、git push origin the_branch //用回滚后的本地分支重新建立远程分支
7、git push origin :the_branch_backup //如果前面都成功了,删除这个备份分支
如果使用了gerrit做远程代码中心库和code review平台,需要确保操作git的用户具备分支的push权限,并且选择了 Force Push选项(在push权限设置里有这个选项)
另外,gerrit中心库是个bare库,将HEAD默认指向了master,因此master分支是不能进行删除操作的,最好不要选择删除master分支的策略,换用其他分支。如果一定要这样做,可以考虑到gerrit服务器上修改HEAD指针。。。不建议这样搞
方法一:
1、新建backup分支 作为备份,以防万一
git branch backup
2、将本地的backup分支 推送到远程的backup
git push origin backup:backup
3、本地仓库彻底回退到xxxxx版本,xxxxx版本之后的commit信息将丢失
git reset --hard xxxxx
4、删除远程的master分支 (注意master前有个:)
git push origin :master
主要远程仓库的master如果是保护分支将报错,请去掉对分支的保护设置:
remote: GitLab: You are allowed to deleted protected branches from this project. To http://gitlab.mogujie.org/shihao/afanty.git ! [remote rejected] master (pre-receive hook declined) error: failed to push some refs to 'http://gitlab.mogujie.org/xxxx/xxxx.git'
5、重新创建远程master分支(这跟第1次提交本地代码库给远程仓库的命令一样)
git push origin master
方法二:
1、本地代码回滚到上一版本(或者指定版本)
git reset --hard HEAD~1
2、加入-f参数,强制提交,远程端将强制跟新到reset版本
git push -f origin master
注:方法二前建议如方法一一样备份当前git中的数据,个人推荐方法二
详情请参考:https://backlog.com/git-tutorial/cn/intro/intro1_1.html
9.恢复本地文件
git reflog 查看提交的记录 前面黄色的字是当时提交时候的ID,也就是当时的版本号
git reset --hard 版本号
就能恢复了
10.代码commit到了莫名的分支或者被分离的HEAD上
只需三部就可以把你不知道提交到了哪的代码,再移动到选定分支上;
这种情况的出现原因:
1: 有可能是确实提交到了某条分支上,但是提交之后发现分支错了,找不到那次提交了;
2: 有可能是未检出分支或者未切换分支,直接在分离的HEAD上进行开发了, 这时你commit后的代码实际是属于游离状态的,不属于任何分支,但是你的电脑本地是存在提交记录的;这就是找回代码的依据;
第一步:
终端:git reflog
(查看所有分支的所有操作记录(包括commit和reset的操作,包括已经被删除的commit记录,git log则不能察看已经删除了的commit记录)
找到你丢失的那次commit记录,记下commit id (就是前面的一串字母加数字)
第二步:
git checkout <你想提交到的分支上>
例如:git checkout master
(查看远端的全部分支: git branch -a (列出全部的分支名))
第三步:
git cherry-pick <commit id> 例如:git cherry-pick hbd37gf76sg
(<commit id>就是在第一步里记录的commit id) 选出这次记录重新提交到当前分支上
(此时,如果使用了SourceTree,就可以在该分支的提交记录上看到了此次提交), 然后再正常的pull + push 就OK了
参考链接:https://www.jianshu.com/p/5c2422919f72
11.HEAD detached from XXXX解决方法
有时候我们还原git到某个指定版本后,会出现问题,参考以下链接。
https://www.cnblogs.com/lihow/p/8903361.html
12. 查看每次提交的内容
12.1. 获取对应提交日志的commit_id : git log
victor@victor:~/project/test$ git log
commit cbd8f7b25884c54a80c4df18142f38e35f37c3c6 (HEAD -> develop, origin/develop)
Merge: 9c55628 136d099
Author: victor <victor@qq.com>
Date: Tue Dec 11 20:15:57 2018 +0800
合并代码冲突
commit 9c55628f4928a245a324694d82977405815a8800
Author: victor <victor@qq.com>
Date: Tue Dec 11 20:04:25 2018 +0800
优化启动流程,mqtt状态写入日志
12.2. 查看commit_id:cbd8f7b25884c54a80c4df18142f38e35f37c3c6内容:
git show cbd8f7b25884c54a80c4df18142f38e35f37c3c6
13. 打开图形化界面
gitk
14.图形化比较界面
git difftool filename
15.合并分支
进入到主分支,然后使用命令
git merge 分支名称
合并冲突了后:
git mergetool 来打开图形化界面
// 从主分支切换到其他分支
git checkout --track appnovel/feature_1.1.0
16.对某个文件取消跟踪
git rm --cached readme1.txt 删除readme1.txt的跟踪,并保留在本地。
git rm --f readme1.txt 删除readme1.txt的跟踪,并且删除本地文件。
// 还原为服务器上的文件
git reset HEAD novel/mod-ad/src/main/java/com/duoyue/mod/ad/dao/gen/
17.更新到其他分支(修改分支名称后)
1)临时保存本地修改
git stash save "tmp" --include-untracked
2) 查看你保存的'储藏'
git stash list
3) 更新远程代码
git fetch
4) 切换到新的分支(加上'--track'参数, 来手动创建一个'追踪分支')
git checkout --track appnovel/feature_1.1.0
5) 查看远程分支详细信息
git branch -vv
6) 恢复以前的工作状态
git stash apply
18.合并代码
1.git fetch 先更新远程代码到本地
2.本地代码先提交
3.git rebase -i 合并代码
4.冲突后 : git mergetool -y 解决冲突,然后保存退出,继续执行git mergetool -y解决完所以冲突
5.删除本地生成的临时文件
6.git rebase --continue 继续合并代码
7.如果想放弃合并代码: git rebase --abort
取消rebase 事务
git rebase --abort
19.操作本地commit
1.合并多次提交的commit :
1.1 执行 git rebase -i HEAD~4 对最近的 4 个 commit 进行 rebase 操作;
1.2 将pick命令改为fixup命令放弃指定的提交注释
1.3 退出保存
2.删除本地commit : 将pick指令修改为drop指令,保存退出
20.查看某个文件的修改记录
1.查看文件日志:git log filename
2.查看文件的修改记录: git log -p filename
21.标签
1.列显已有的标签 : git tag
2.轻量级标签: git tag v1.4
3.含附注的标签: git tag -a v1.4 -m 'my version 1.4'
4.查看标签信息: git show v1.4