Git 操作汇总

本篇为git使用过程中的一些操作记载,不定期更新。

目录

  1. -------------------git  常规一套流程
  2. -------------------git 放弃修改(add、commit)
  3. -------------------git  pull/push/fetch
  4. -------------------git关联本地与远程分支
  5. -------------------git branch  查看(删除)分支  
  6. -------------------git  tag 
  7. -------------------git  恢复reset删除(本地分支的commit被reset了)
  8. -------------------git  config
  9. -------------------关于git不清洗缓冲区不能切分支的问题。
  10. -------------------git  merge(合并分支&&commit)
  11. -------------------git  remote
  12. -------------------git  submodule


-------------------git  常规一套流程

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 放弃修改(add、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  pull/push/fetch

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

-------------------git关联本地与远程分支

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  查看(删除)分支  

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 

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  恢复reset删除(本地分支的commit被reset了)

git reflog  查看被reset的commit

然后再执行  git reset --hard HEAD@{XXX} 来恢复。

-------------------git  config

git config --system --list     ----查看系统的配置。

git config --global --list     ----查看全局的配置。
 
git config --local  --list     ----查看当前仓库的配置。

底层配置会覆盖顶层配置

举个栗子。
git config --global user.name "myname"
git config --global user.email  "[email protected]"

-------------------关于git不清洗缓冲区不能切分支的问题。

有如下几种处理方式:
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(合并分支&&commit)


合并其他分支的代码到当前分支。
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

git remote update origin --prune   # 更新远程主机origin 整理分支

git remote -v                      # 列出详细信息,包括库和URL地址。

-------------------git  submodule

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 = [email protected]:zhangyong.git

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章