赞
踩
本篇为工作中 git 使用过程中的一些操作记载,不定期更新。
目录
7、git 恢复reset删除(本地分支的commit被reset了看不到了怎么恢复)
- git clone http://github.com/jquery/jquery.git 克隆远程仓库到本地
- git status //(最常用的命令) 查看当前代码库当前分支的变化,包括 没有add的文件和已提交等待push的commit
- 如果本地代码都push到远程了会返回类似 nothing to commit, working tree clean
- git add . //将当前目录下的所有修改添加到本地暂存区。
- git commit -m '这是提交的注释,gitlab会看到描述' //添加本地暂存区的数据到本地的分支(HEAD)
- git pull origin master //push前先拉gitlab的代码是个好习惯、(此时可能会有冲突)
- 如果有冲突(别人更新了远程代码库) 就合并一下,这块建议在idea这种自带git工具或者 source Tree 这种工具中玩,比较方便。 然后可以选择 merge/rebase
- merge会将分支树变丑,默认是merge 然后再commit 就可以push了。
- git push origin master //将本地master的commit提交到远程。
- git checkout . //放弃本地 add操作之前的修改。
- git checkout -- a/b.txt //放弃本地指定文件的修改(未add的文件)。 如果是新创建的文件直接手动删除就好了。
- git reset HEAD a.txt //放弃 add 但没commit的修改。(已经add的文件)
- git reset --hard HEAD ^ //放弃本次commit、 HEAD ^ 可以根据commitID进行修改。 git log查看、
- git reset --hard commitID //回滚当前分支版本的修改到某一个提交。 这个commitID 是你要回滚到的commitID
- git push -f origin master //回滚完需强制提交。(gitlab不会被污染) origin master 根据分支不同需要切换。
- git push <远程主机名> <本地分支名>:<远程分支名>
- 将本地的master分支推送到origin主机的master分支。如果master不存在,则会被新建
- git push origin --delete dev //删dev分支本地与远程的联系,并在远程删除dev分支。 origin 是远程主机名。默认origin
- git push origin :foo //空 source 会删除远程仓库中的foo分支。
- git push -u origin master //将本地的master分支推送到origin主机, -u指定origin为默认主机,后面就可以不加任何参数使用git push
- git push origin //将当前分支推送到远程。
- git push origin master^:newBranch //检索master^ 推送到远程的newBranch 推送的分支不存在创建新分支
-
- git fetch origin foo //抓远程的foo分支到本地的 origin/foo分支 所取回的更新,在本地主机上要用”远程主机名/分支名”的形式读取
- 也可以使用git merge命令或者git rebase命令,在本地分支上合并远程分支. git merge origin/master 就合并fetch的信息到当前分支了。
- git fetch origin foo^:bar //抓远程foo提前一个commit的记录到本地 本地bar分支不存在就本地创建
- 如果 git fetch 没有参数,它会下载所有的提交记录到各个远程分支!!!
- git fetch origin :bar //如果fetch空 source 会在本地创建一个分支 bar
-
- git pull origin foo //相当于git fetch origin foo; git merge origin/foo
- git pull origin master //会将远程的master抓下来并与当前分支合并,无论我们当前检出的位置是哪。
- git pull origin master:foo //抓取master,将foo指向master的commit 合并当前位置与抓下来的master
- 1.本地已有分支,建立关联关系
- git branch --set-upstream-to origin/feature/1.0.0base 关联本地当前分支(master) 与远程 feature/1.0.0base 分支
-
- 2.本地尚未有分支,新建分支并创建关联关系(常用)
- git checkout -b feature/1.0.0base origin/feature/1.0.0base
- 新建本地 feature/1.0.0base 分支关联到远程的指定分支
- git branch -a //查看远程的所有分支
-
- git branch -v //查看本地分支与远程分支的对应关系。
-
- git branch -vv //查看本地与远程分支的对应关系。
-
- git branch -r //列出远程分支。
-
- git branch -d //删除本地分支。
-
- 如果想删除本地dev分支并且删除远程库dev分支,并删除他俩之间的联系。
-
- git branch -d dev //删本地dev分支
-
- git push origin --delete dev //删dev分支本地与远程的联系,并在远程删除dev分支。
- git tag 是以当前的HEAD的 commit记录来打tag的。
-
- git tag //查看tag
- git tag v1.1.0 //给当前分支打tag
- git tag v1.0.0 039bf8b //给指定commit打tag
- git tag --delete v1.0.0 //删除本地tag
- git push -d origin v1.0.0 //删除远程tag ==> git push --delete origin v1.0.0
-
- git push origin v1.0.0 //推送本地指定tag
- git push --tags //推送所有本地tag
- git reflog 查看被reset的commit
-
- 然后再执行 git reset --hard HEAD@{XXX} 来恢复。
- git config --system --list ----查看系统的配置。
-
- git config --global --list ----查看全局的配置。
-
- git config --local --list ----查看当前仓库的配置。
-
- 底层配置会覆盖顶层配置
-
- 举个栗子。
- git config --global user.name "myname"
- git config --global user.email "test@gmail.com"
- 有如下几种处理方式:
- 1. git add并且git commit,再git checkout,切换到当前分支
- 2. git add但不git commit,可以git stash,然后git checkout到新分支,做修改,然后git checkout回到之前的分支之后git stash apply,再git commit,提交到之前的分支
- git stash apply stash@{2} 到应用指定的stash存储桶、
- 3. git add但不git commit,也不git stash,直接git checkout到新分支,做修改,然后再git commit的话,记录就在切换后的分支下面。
-
- 其背后的原因:一个本地的git repo只有一个工作区和暂存区,但是有多个分支的提交区,而我们的checkout只是将HEAD指针从一个分支切换到另一个分支。
-
- 合并其他分支的代码到当前分支。
- git merge hotfix 合并 hotfix分支的代码到 当前的分支。 (合并的是分支)
- 当我们只需要合并一个commit时,就只需 git checkpick 1heohdqi2ud 将指定的commitID 合并到当前分支、
- 还有一种是使用rebase rebase和merge的区别就是 rebase更好看一些。不会让git tree 乱七八糟的。
- git rebase --onto master 76cada^
- git rebase side1 side2 将side2 合并到side1下面。rebase commit side只是一个标志HEAD。可以写成分支名称。
- git remote update origin --prune # 更新远程主机origin 整理分支
-
- git remote -v # 列出详细信息,包括库和URL地址。
- git submodule add https://www.gitlabxxx.com/zhangyong.git ext/zhangyong
-
- 上面这个命令是在父.git 下执行的。将子模块添加到了 父目录下/ext/zhangyong处。
- 在提交父项目到gitlab时不会将ext/zhangyong中的所有文件都提上去,而是在zhangyong这个文件中记录https://www.gitlabxxx.com/zhangyong.git 的commitID
-
- //虽然是工作目录中的一个子目录,但 Git 还是会将它视作一个子模块。当你不在那个目录中时,Git 并不会跟踪它的内容, 而是将它看作该仓库中的一个特殊提交。
-
- git diff --cached --submodule // 查看子模块的信息。
-
- 克隆项目到本地
- git clone --recursive http://gitlabxxx.com/zhangyong/MainProject
-
- 上述命令相当于先 git clone http://gitlabxxx.com/zhangyong/MainProject 在到对应的子模块中顺序执行git submodule init git submodule update 将子模块的代码拉下来、
-
- 更新子模块
- 1.父目录下运行 git submodule foreach git pull
- 2.子模块中执行 git pull
-
- 删除submodule
-
- git rm --cached sql_source/s1 //变更父.git的index文件
- rm -rf sql_source/s1 //删除子模块文件(夹)
- vim .gitmodules //变更module配置文件 删除对应的子模块信息
- vim .git/config //变更配置信息
-
- [submodule "sql_source/s1"]
- path = sql_source/s1
- url = git@gitlabxxx.com:zhangyong.git
- git init
-
- git add .
-
- git commit -m ' msg'
-
- git pull origin master --allow-unrelated-histories
-
- 处理冲突 commit
-
- git push origin master
- git checkout master
-
- git cherry-pick dad12dawdwa // 后面是commitID
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。