常用git命令

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值