git add filename
git pull
git commit -m "说明"
git push
先删除工作区中的文件,在删除暂存区的文件
rm fileName
git rm 文件名
git rm -f 文件名
git rm --cached 文件名
如果commit后,再pull时出现冲突,先在本地代码中解决掉冲突,再add,commit,然后再pull,commit,push
git remote -v
恢复到最后一次提交的改动:
git checkout + 需要恢复的文件名路径
但是,需要注意的是,如果该文件已经 add 到暂存队列中,上面的命令就不灵光喽
需要先让这个文件取消暂存:
git reset HEAD + 需要取消暂存的文件名路径
然后再使用 命令:
git checkout + 需要取消暂存的文件名路径
git remote show origin
对于某个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
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 强制提交
git reflog #查看提交的记录 前面黄色的字是当时提交时候的ID,也就是当时的版本号
git reset --hard 版本号
就能恢复了
只需三部就可以把你不知道提交到了哪的代码,再移动到选定分支上;
这种情况的出现原因:
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
有时候我们还原git到某个指定版本后,会出现问题,参考以下链接。
https://www.cnblogs.com/lihow/p/8903361.html
root@root:~/project/test$ git log
commit cbd8f7b25884c54a80c4df18142f38e35f37c3c6 (HEAD -> develop, origin/develop)
Merge: 9c55628 136d099
git show cbd8f7b25884c54a80c4df18142f38e35f37c3c6
gitk
git difftool filename
进入到主分支,然后使用命令
git merge 分支名称
合并冲突了后:
git mergetool 来打开图形化界面
// 从主分支切换到其他分支
git checkout --track appnovel/feature_1.1.0
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/
1)临时保存本地修改
git stash save "tmp" --include-untracked
git stash list
git fetch
git checkout --track appnovel/feature_1.1.0
git branch -vv
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
1.合并多次提交的commit :
1.1 执行 git rebase -i HEAD~4 对最近的 4 个 commit 进行 rebase 操作;
1.2 将pick命令改为fixup命令放弃指定的提交注释
1.3 退出保存
2.删除本地commit : 将pick指令修改为drop指令,保存退出
1.查看文件日志:git log filename
2.查看文件的修改记录: git log -p filename
1.列显已有的标签 : git tag
2.轻量级标签: git tag v1.4
3.含附注的标签: git tag -a v1.4 -m ‘my version 1.4’
4.查看标签信息: git show v1.4
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
git branch -D 分支名称
1.git reset --hard HEAD~N N是回退到倒数第几个版本
2.git push -f 强制提交
git push origin --delete [branch_name]
1.从HEAD版本开始往过去数3个版本
git rebase -i HEAD~3
2.将pick改为squash或者s,之后wq并关闭文本编辑窗口即可
3.再次编辑log日志,wq保存退出即可
4.如果放弃:git rebase --abort
$ git reset HEAD~ // 放弃本地最后一次的commit
git reset --hard commit_id(可用 git log –oneline 查看)
git push origin HEAD --force #远程提交回退
git show commitId
git checkout <commit id> <file path>
1.首次切换到子模块后:
git submodule init
git submodule update
2.先在submodule子工程提交push
3.在主工程git commit -am “”
git cherry-pick 7fcb3defff
这个命令会将暂存区中的文件提交。 如果自上次提交以来你还未做任何修改(例如,在上次提交后马上执行了此命令), 那么快照会保持不变,而你所修改的只是提交信息。
文本编辑器启动后,可以看到之前的提交信息。 编辑后保存会覆盖原来的提交信息。
例如,你提交后发现忘记了暂存某些需要的修改,可以像下面这样操作:
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
java -jar walle-cli-all.jar batch -f config/channel.txt glh/gogu/goguOriginal/release/glh-gogu-original-release.apk
git tag -a "tagName" commitId
#推送到远程服务器上
$ git push origin --tags
#第一步,切换到你指定的分支。如我要从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