git简单使用

来源:互联网 发布:h3c 多个端口删除vlan 编辑:程序博客网 时间:2024/06/16 03:07

git环境变量配置

git config --global user.name Tom   # 用户名git config --global user.email 1234567a@163.com  # 邮件地址sudo git config --system alias.st status   # 设置命令别名, 不喜欢用git config --global color.ui true  # git命令输出中开启颜色显示

git 基本操作

git init  # 初始化当前目录位版本库git add readme.md  # 将新建立的readme.md文件添加到暂存区git commit -m "create file readme.md"  # 将git add命令添加到暂存区的文件,提交到版本库git commit -a -m "create file readme.md"  # 将所有跟踪的文件(包括未暂存的),都提交到版本库git commit --amend -m "new annotation"  # 这个命令会将暂存区中的文件提交。 如果自上次提交以来你还未做任何修改(例如,在上次提交后马上执行了此命令),那么快照会保持不变,而你所修改的只是提交信息。如果做了修改,第二次提交将代替第一次提交的结果,最终你只会有一个提交 git merge acc2f69  # 合并git diff  # 查看本地与暂存区文件的差异git diff HEAD  # 本地与当前版本库头指针文件的差异git diff --staged  # 暂存区文件与当前版本库头指针文件的差异git status  # 查看文件状态git reset HEAD  # 暂存区目录树会被HEAD指向的目录树重写git reset HEAD readme.md  # 暂存区readme.md会被HEAD指向的readme.md替换git reset --hard HEAD^  # 将分支重置到上一个提交,这时工作区,缓存区和版本库的所有新的修改将会被放弃git reset --hard 9e8a761  # 将分支重置到这个id的版本,这时工作区,缓存区和版本库的所有新的修改将会被放弃git rm readme.md  # 将readme.md的删除动作提交到暂存区git rm -f readme.md  # 如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -fgit rm --cached readme.md  # 想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。 换句话说,你想让文件保留在磁盘,但是并不想让 Git 继续跟踪git rm log/\*.log  # 支持glob(shell的正则)模式git mv README.md README  # 重命名操作,相当于执行以下三条命令:$ mv README.md README    $ git rm README.md    $ git add READMEgit checkout .  # 工作区的文件会被暂存区的文件替换git checkout readme.md  # 工作区的readme.md文件会被暂存区的readme.md文件替换git checkout HEAD .  # 工作区和暂存区的文件会被HEAD指向的分支的文件替换git checkout HEAD readme.md  # 工作区和暂存区的readme.md文件会被HEAD指向的分支的readme.md文件替换git checkout -b new_branch  # 新建分支,并会把工作区, 暂存区, 版本库都迁移过来

git日志

git log -stat  # 查看提交日志git log --graph --oneline  # 查看简短提交日志, 包含提交的分支git log --oneline --decorate  # 查看各个分支当前所指的对象git log --oneline --decorate --graph --all  # 输出提交历史、各个分支的指向以及项目的分支分叉情况

git 分支

git branch  # 显示当前分支, git branch -v 查看每一个分支的最后一次提交。git branch --merged  # 查看哪些分支已经合并到当前分支, --no-merged 查看所有包含未合并工作的分支git branch testing  # 创建分支git checkout testing  # 切换到testing分支,这条命令做了两件事,一是使 HEAD 指回 master 分支,二是将工作目录恢复成 master 分支所指向的快照内容(工作目录和暂存区里那些还没有被提交的修改,不随分支变化而变化, 可以在切换分支前使用git stash保证分支是干净的)git checkout -b testing  # 创建分支并切换到该分支下, 即是 git branch testing 与 git checkout testing 的合并git merge testing  # 将当前分支与testing分支合并。当发生冲突时,冲突的文件会以 "Unmerged" 关键字标识出来,这个时候要编辑冲突的文件以解决冲突,然后 git add, git commit,就可以生成merge后的提交git merge --no-ff testing  # 默认情况下,Git执行"快进式合并"(fast-farward merge),会直接将Master分支指向Develop分支.使用--no-ff参数后,会执行正常合并,在Master分支上生成一个新节点。为了保证版本演进的清晰,我们希望采用这种做法git merge --squash testing  # squash 选项的含义是:本地文件内容与不使用该选项的合并结果相同,但是不保留待合并分支上的历史信息,也不提交、不移动HEAD,因此需要一条额外的commit命令。其效果相当于将another分支上的多个commit合并成一个,放在当前分支上,原来的commit历史则没有拿过来git branch -d testing  # 删除分支,若分支包含了还未合并的工作,则会删除失败,这时候要么合并,要么使用git branch -D testing强制删除

git远程分支

git remote  # 列出你指定的每一个远程服务器的简写。origin 是Git 给你克隆的仓库服务器的默认名字.使用 -v 会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URLgit remote show [remote-name]  # git remote show origin,查看远程仓库的详细信息git remote add <shortname> <url>  # 添加一个新的远程 Git 仓库,同时指定一个你可以轻松引用的简写, 例如git remote add pb https://github.com/paulboone/ticgitgit remote rename pb paul  # 修改一个远程仓库的简写名git remote rm paul  # 移除一个远程仓库从服务器拉取提交git fetch [remote-name]  # 这个命令会访问远程仓库,从中拉取所有你还没有的数据。注意 git fetch 命令会将数据拉取到你的本地仓库 - 它并不会自动合并或修改你当前的工作。 当准备好时你必须手动将其合并入你的工作git merge origin/master  # 将远程master分支的内容合并到当前所在的分支或git pull  # 从一个远程跟踪分支检出一个本地分支会自动创建一个 “跟踪分支”,跟踪分支是与远程分支有直接关系的本地分支,如果在一个跟踪分支上输入 git pull,Git 能自动地识别去哪个服务器上抓取、合并到哪个分支。git branch -u origin/devel2 可以修改跟踪分支git pull origin next:master  # 取回远程服务器next分支,与本地master分支合并git pull origin master  # 取回远程master分支,与当前分支合并 推送提交到服务器git push origin master  # 推送到远程仓库,需要你有所克隆服务器的写入权限,推送本地的 master 分支来更新远程仓库origin上的 master 分支,相当于git push origin master:mastergit push origin --delete devel  # 从服务器上删除 devel 分支git checkout -b devel origin/devel  # 这会给你一个用于工作的本地分支,并且起点位于 origin/develgit branch -vv  # 将所有的本地分支列出来并且包含更多的信息,如每一个分支正在跟踪哪个远程分支与本地分支是否是领先、落后或是都有。如果想要统计最新的领先与落后数字,需要在运行此命令前抓取所有的远程仓库:git fetch --all; git branch -vv上面的命令中,如git checkout -b devel origin/devel, git branch -vv,并不会真正和服务器交互,而是使用的上次从服务器取下来的,保存在本地的服务器数据git checkout devel;  git rebase master  # 变基操作,太蛋疼了,参考https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%8F%98%E5%9F%BA

git 标签
历史中的某一个提交打上标签,以示重要。比较有代表性的是人们会使用这个功能来标记发布结点(v1.0 等等)

git tag  # 列出已有的标签git tag -a v1.4 -m 'my version 1.4'  # 创建附注标签,附注标签会包含打标签者的名字、电子邮件地址、日期时间等。也可以打轻量级标签,但一般不建议git show v1.4  # 可以看到标签信息与对应的提交信息git tag -a v1.2 9fceb02  # 也可以对过去的提交打标签git push origin --tags  # 共享标签:默认情况下,git push 命令并不会传送标签到远程仓库服务器上, 这条命令将会把所有不在远程仓库服务器上的标签全部传送到那里git checkout -b version2 v2.0.0  # 检出标签: 在 Git 中你并不能真的检出一个标签,因为它们并不能像分支一样来回移动。 如果你想要工作目录与仓库中特定的标签版本完全一样,可以使用 git checkout -b [branchname] [tagname] 在特定的标签上创建一个新分支

git 其他操作

git grep "readme.md"  # 使用git grep 搜索时将会忽略.git目录, 使结果更合理git rev-parse --show-toplevel  # 显示工作区根目录git stash  # 保存当前工作进度git stash list  # 查看保存的进度git stash pop  # 恢复进度

commit多次时,放弃其中某次提交

git log --oneline9f6c3b7 3efae244 2e07b220 11c463cf ssbfa8889 dd74fa61e rest076537d sscfa098c 1git checkout 1c463cf  # 将HEAD头指针切换到之前的那一次次提交git cherry-pick efae244  #cherry-pick之后的提交, 此时已完成抛弃e07b220git cherry-pick 9f6c3b7git checkout devel  # HEAD头指针切换回develgit reset --hard HEAD@{1}  # HEAD指向前一个分支

删除服务器上的提交记录

假设你有3个commit如下:commit 3commit 2commit 1其中最后一次提交commit 3是错误的,那么可以执行:git reset --hard HEAD~1你会发现,HEAD is now at commit 2。然后再使用git push --force将本次变更强行推送至服务器。这样在服务器上的最后一次错误提交也彻底消失了。值得注意的是,这类操作比较比较危险,例如:在你的commit 3之后别人又提交了新的commit 4,那在你强制推送之后,那位仁兄的commit 4也跟着一起消失了。
0 0
原创粉丝点击