git常用操作命令

1.提交代码

git add filename
git pull
git commit -m "说明"
git push

2.删除文件

2.1新写一个文件,并提交到暂存区

先删除工作区中的文件,在删除暂存区的文件

rm fileName

git rm 文件名

2.2同时删除工作区和暂存区中的文件

git rm -f 文件名

2.3删除暂存区的文件,不删除工作区的文件

git rm --cached 文件名

3.解决冲突

如果commit后,再pull时出现冲突,先在本地代码中解决掉冲突,再add,commit,然后再pull,commit,push

4.查看git路径

git remote -v

5.恢复本地文件

恢复到最后一次提交的改动:

git checkout  + 需要恢复的文件名路径

但是,需要注意的是,如果该文件已经 add 到暂存队列中,上面的命令就不灵光喽
需要先让这个文件取消暂存:

git reset HEAD  + 需要取消暂存的文件名路径

然后再使用 命令:

git 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

删除远程分支的某个commit:
1.git rebase -i “commit id”^ //注意^不能少 意思是包含本次要删除的commit
然后出现交互界面 :
2.dd删除要移除的commit(就是你要删除的目标commit) ,:wq保存即可
3.git push -f 强制提交

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 例如:git cherry-pick hbd37gf76sg
(就是在第一步里记录的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

root@root:~/project/test$ git log
commit cbd8f7b25884c54a80c4df18142f38e35f37c3c6 (HEAD -> develop, origin/develop)
Merge: 9c55628 136d099

12.2. 查看commit_id修改的内容:

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
  1. 查看你保存的’储藏’
git stash list
  1. 更新远程代码
git fetch
  1. 切换到新的分支(加上’–track’参数, 来手动创建一个’追踪分支’)
git checkout --track appnovel/feature_1.1.0
  1. 查看远程分支详细信息
git branch -vv
  1. 恢复以前的工作状态
    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

22.基于某个分支创建分支

1、拷贝源代码
git clone git@git地址
cd 项目目录
2、根据已有分支创建新的分支
git checkout -b yourbranchname develop/oldbranchname
3.关联到远程分支
git push -u origin yourbranchname
4、修改后推送到git
git push develop yourbranchname

23.删除本地分支

git branch -D 分支名称

24.删除远程commit

1.git reset --hard HEAD~N N是回退到倒数第几个版本
2.git push -f 强制提交

25.删除远程分支

git push origin --delete [branch_name]

26.合并本地多个commit日志

1.从HEAD版本开始往过去数3个版本
git rebase -i HEAD~3
2.将pick改为squash或者s,之后wq并关闭文本编辑窗口即可
3.再次编辑log日志,wq保存退出即可
4.如果放弃:git rebase --abort

27.放弃本地commit

$ git reset HEAD~ // 放弃本地最后一次的commit

28.Git本地及远程分支回退

  1. git本地版本回退
git reset --hard commit_id(可用 git log –oneline 查看)
  1. git远程版本回退
git push origin HEAD --force #远程提交回退

29.查看commit修改的内容

git show commitId

30.回退到某个版本(file path 可以是文件/文件夹/或使用通配符)

git checkout <commit id> <file path>

31.删除远程分支的commit

32.submodule操作

1.首次切换到子模块后:
git submodule init
git submodule update
2.先在submodule子工程提交push
3.在主工程git commit -am “”

33.合并其他某个commit

git cherry-pick 7fcb3defff

34.git commit --amend

这个命令会将暂存区中的文件提交。 如果自上次提交以来你还未做任何修改(例如,在上次提交后马上执行了此命令), 那么快照会保持不变,而你所修改的只是提交信息。

文本编辑器启动后,可以看到之前的提交信息。 编辑后保存会覆盖原来的提交信息。

例如,你提交后发现忘记了暂存某些需要的修改,可以像下面这样操作:

$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend

35.美团多渠道打包

java -jar walle-cli-all.jar batch -f config/channel.txt glh/gogu/goguOriginal/release/glh-gogu-original-release.apk

36.在commit上创建tag

git tag -a "tagName" commitId
#推送到远程服务器上
$ git push origin --tags

37.从某个分支创建新的分支,并提交到远程

#第一步,切换到你指定的分支。如我要从dev上拉一个分支,代码一模一样

git checkout dev 

#第二步,拉取dev的最新代码
git pull
#第三步,在本地创建一个test分支,并切换到该分支。此时执行git branch会看到该分支在本地已创建

git checkout -b test 

#第四步,把分支推到远程仓库。此时执行git branch -av可以看到该分支在远程仓库也有了

git push origin test

#第五步,将本地分支与远程分支关联

git branch --set-upstream-to=origin/test test

你可能感兴趣的:(git,git)