修改远程URL
git remote set-url origin https://github.com/xxxx/snap.git # 通过HTTP的方式git remote set-url origin git@github.com:iosmers/snap.git
git config
git config
用于获取并设置存储或者全局变量,这些变量可以控制git
的各个操作 git config
分为两个级别
- 全局级别配置,全局级别配置对应用户目录下的.gitconfig文件
git config --global user.name "your name"git config --global user.email "you email"
- 仓库级别,仅仅适用于当前
git
仓库,仓库级别配置对应仓库里.git/config文件git config user.name "your name"git config user.email "your email"
通过git config
还可以配置git
的各种选项,比如文本编辑器、远程仓库地址、钩子等
#[core]部分:这里存储了与git 仓库的核心设置的相关配置[core]repositoryformatversion = 0filemode = truebare = falselogallrefupdates = truesymlinks = falseignorecase = true#[remote "origin"]部分:这里存储了与远程仓库别名"origin"相关的配置[remote "origin"]url = https://github.com/user/repo.gitfetch = +refs/heads/*:refs/remotes/origin/* #fetch表示从远程仓库拉取代码时需要获取的分支# 可以配置多个origin[remote "paddle_origin"]url = https://github.com/user/repo.gitfetch = +refs/heads/*:refs/remotes/origin/* #fetch表示从远程仓库拉取代码时需要获取的分支#[branch "main"]部分,这里存储了与分支"main"相关的配置[branch "main"]remote = originmerge = refs/heads/main
可以使用git config --list
命令列出来git可以在该处找到的所有的设置
git branch 分支管理
# 新建分支并切换到该分支git checkout -b branch_name# 将当前分支合并指定分支到当前分支git merge branch_name# 删除分支git branch -d branch_name# 从本地删除远程分支git push origin --delete branch_namegit branch -dr remote/branch查看本地的分支以及关联的分支`git branch -vv`# 对当前分支进行改名git branch -m old_branch new_branch
查看分支来源
# 查看分支来源git reflog show branch_name
对远程分支的操作
#查看所有远程分支git branch -r# 查看远程分支及其关联的本地分支git remote show origin# 获取远程分支列表git ls-remote --heads origin
注意,每次都需要从develop分支创建别的分支,不要从还没合并的分支中切过去
git 统计代码行数
*//显示项目的所有文件列表及行数(已删除的文件显示为空),最后一行会显示项目代码的总行数*git ls-files | xargs wc -l//只统计项目代码的总行数git ls-files | xargs cat | wc -l// 只查看项目文件列表git ls-files
git rebase 和 git merge
- git rebase和git merge的作用是一样的,把一个分支合并到另一个分支不同的是git merge会保留原有分支结构,也正是因为会保留原有分支结构,所以如果git merge用多了就会导致git 分支结构比较庞大rebase操作不会保留分支结构,如果执行git rebase develop命令,它首先会找develop分支和当前分支的公共节点,然后把当前分支嫁接到develop分支上
git revert和git reset
git revert和git reset都是用于处理历史提交命令
- git reset用于将分支的HEAD移动到不同的提交,git reset会修改提交历史,这意味着之前的提交会被抹去,不再存在于分支上。要谨慎使用
git reset --hard commit #这个模式会彻底重置分支,将分支的HEAD移动到指定的提交,并且删除暂存区和工作目录的内容git reset --soft commit #这个模式将分支的HEAD移动到指定的提交,但是不会更改暂存区和工作目录的内容,之前的修改仍然保留在暂存区和工作目录之中git reset --mixed commit #
- git revert用于创建一个新的提交,该提交会首先撤销先前的提交,它不会修改提交历史,而是添加新的提交来取消之前的提交。git revert相对安全。最大的区别就是一条有记录,一条没记录git revert的目标是保留历史提交,而不是删除或重写提交,使用方法
git revert commitid
拉取别人未合入的PR
# 添加远程链接git remote add remote_git_repository url# 拉取远程分支并关联到本地分支git fetch remote_git_repository remote_branch:local_branch# 合并代码到本地分支git merge local_branch
git reflog
git reflog用于记录本地仓库中HEAD(当前分支的顶端)的移动操作。一般用途:
1、历史记录,git reflog显示了head的变动历史,每次切换分支,创建新提交,重置分支的时候,head的指向都会改变,这些变化都会记录在git reflog中2、找回丢失的提交,如果你不小心删除了一个分支或者重置了提交,可以使用git reflog找到那些丢失的提交的引用。这是因为即使在删除分支后,git仍然保留了一段时间的操作记录3、撤销操作,通过查看git reflog,你可以看到之前head的位置,这允许你回退到之前的状态,比如撤销一次错误的rebase,merge或者其他操作比如:
使用 Git Reflog 找回更改
假设你正在工作于一个项目,并进行了一些更改。在提交这些更改之前,你不小心执行了 git reset --hard HEAD~1
,这使得你回到了上一个提交,并丢失了当前的工作。
git refloga1b2c3d (HEAD -> master) HEAD@{0}: reset: moving to HEAD~1e4f5g6h HEAD@{1}: commit: Your recent commit message...# 找到之前要恢复到的提交,比如e4f5g6hgit reset --hard e4f5g6h
使用 Git Reflog 撤销合并
假设你正在你的 master
分支上工作,并决定合并一个名为 feature
的分支到 master
。但合并后,你意识到这个合并是错误的,你想要撤销它。
git refloga1b2c3d (HEAD -> master) HEAD@{0}: merge feature: Merge made by the 'recursive' strategy.e4f5g6h HEAD@{1}: commit: A commit on master before merge...**撤销合并**git reset --hard e4f5g6h
git stash
git stash命令可以将暂存区和工作区的文件保存到git栈中,一般有两种使用场景
- 你在dev1下开发分支,突然让你去dev2上修复一个bug,这个时候可以用git stash把你修改暂存起来
# 暂时保存没有提交的工作$ git stashSaved working directory and index state WIP on workbranch: 56cd5d4 Revert "update old files"HEAD is now at 56cd5d4 Revert "update old files"# 列出所有暂时保存的工作$ git stash liststash@{0}: WIP on workbranch: 56cd5d4 Revert "update old files"stash@{1}: WIP on project1: 1dd87ea commit "fix typos and grammar"# 恢复某个暂时保存的工作$ git stash apply stash@{1}
特别注意,使用git stash pop
命令,栈里面的记录就没了。另外,pop或者apply命令如果与当前工作区的代码有冲突,需要手动调整。
将多个commit合并到一个commit
在git中,可以使用rebase命令来将多个commit合并成一个commit,这个构成称之为squashing。下面是操作过程
1、启动交互式rebase,这里的N是指想要合并的数量,比如想合并最近的三个提交,N=3,-i是指交互式的rebase
git rebase -i HEAD~N
2、选择要合并的提交,注意看下面的注释的意思,如果想合并提交,除了第一个提交以外,将其余的提交前面pick改为squash或者s,这告诉git将这些提交合并到前一个提交中,第一个通常泡池pick,因为它是其他提交合并的基础
重新排序提交(如果需要)4、退出保存,按wq退出,这个过程可能会出现冲突,解决即可5、编辑最终的提交信息,你可以决定保留哪些信息,或者编写一个新的提交信息
6、强制推送更改
git push --force origin master