美文网首页
git常用操作

git常用操作

作者: 米酒真香 | 来源:发表于2018-05-09 20:34 被阅读71次

1. 本地创建版本库

mkdir note
cd note
git init  # 初始化git。 note目录下回多一个.git的隐藏目录。.git目录用来存放git版本控制的元数据,用以追踪文件的变化,不要动,否则会发生意想不到的后果。
touch readme.md  #  创建readme.md文件。输入几行内容:如:my learning note\n Linux \n git \n MySQL
$ cat -n readme.md  # 查看readme.md文件的内容
     1  my learning note
     2  Linux
     3  git
     4  MySQL

wt@wt MINGW64 ~/Desktop/note (master)
$ ls  # 查看当前目录下的文件
git/  Linux/  MySQL/  readme.md
$ git add readme.md  # 把readme.md添加到暂存区(以追踪文件的变化)
warning: LF will be replaced by CRLF in readme.md.
The file will have its original line endings in your working directory.

$ git commit -m '提交test'  # 把暂存区内所有被追踪的内容(被add添加过的)提交到本地仓库
[master 58577a4] 提交test1
 1 file changed, 3 insertions(+)


$ vi readme.md  # 用vi编辑器打开readme.md文件,给文件添加一行汉字

$ cat -n readme.md  # 查看文件
     1  my learning note
     2  Linux
     3  git
     4  MySQL
     5  添加汉字!

wt@wt MINGW64 ~/Desktop/note (master)
$ git status  # git status命令可以让我们时刻掌握仓库当前的状态,上面的命令告诉我们,readme.md被修改过了,但还没有准备提交的修改。
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   readme.md   # 显示修改的文件

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        Linux/
        MySQL/
        git/

no changes added to commit (use "git add" and/or "git commit -a")

$ git diff readme.md  # 查看文件变化
diff --git a/readme.md b/readme.md
index 01e4ef8..047b0de 100644
--- a/readme.md  # 同一个文件的a,b两种不同的状态
+++ b/readme.md
@@ -2,6 +2,4 @@ my learning note
 Linux
 git
 MySQL
-
-add one line here;
 添加汉字!
warning: LF will be replaced by CRLF in readme.md.
The file will have its original line endings in your working directory.
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   readme.md

Untracked files:  # 未追踪的文件,因为我们还没有git add 这些文件
  (use "git add <file>..." to include in what will be committed)

        Linux/
        MySQL/
        git/

no changes added to commit (use "git add" and/or "git commit -a")
git add .  # 把当前目录下所有目录及文件添加到暂存区以追踪。相对于 git add -A或者git add ./*

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   "Linux/2018-5-6 Linux\350\246\201\345\246\202\344\275\225\345\255\246\344\271\240 160224.md"  # 这些是中文乱码,下面有解决这个问题的方法。
        new file:   Linux/Note3.md
        new file:   Linux/Note4.md
        new file:   Linux/note1.md
        new file:   Linux/note2.md
        new file:   MySQL/Note1.md
        new file:   "git/git\346\223\215\344\275\234.eddx"  # 中文乱码
        new file:   "git/git\346\223\215\344\275\234.png"  # 中文乱码
        new file:   git/note.md
        new file:   "git/\347\211\210\346\234\254\346\216\247\345\210\266.xmind"  # 中文乱码
        modified:   readme.md


wt@wt MINGW64 ~/Desktop/note (master)
$

中文乱码的解决办法:

在git命令行输入git config --global core.quotepath false 就可以了

core.quotepath设为false的话,就不会对0x80以上的字符进行quote。中文显示正常

2. git add 的参数

rock@wtgg:~$ git add -h  # 关于添加的参数
用法:git add [<选项>] [--] <路径规格>...

    -n, --dry-run         演习
    -v, --verbose         冗长输出

    -i, --interactive     交互式拣选
    -p, --patch           交互式挑选数据块
    -e, --edit            编辑当前差异并应用
    -f, --force           允许添加忽略的文件
    -u, --update          更新已跟踪的文件
    --renormalize         对已跟踪文件(暗含 -u)重新归一换行符
    -N, --intent-to-add   只记录,该路径稍后再添加
    -A, --all             添加所有改变的已跟踪文件和未跟踪文件
    --ignore-removal      忽略工作区中移除的路径(和 --no-all 相同)
    --refresh             不添加,只刷新索引
    --ignore-errors       跳过因出错不能添加的文件
    --ignore-missing      检查在演习模式下文件(即使不存在)是否被忽略
    --chmod <(+/-)x>      覆盖列表里文件的可执行位

rock@wtgg:~$ 

3. git commit 的参数

git commit -m 用于提交暂存区的文件;git commit -am 用于提交跟踪过的文件

rock@wtgg:~$ git commit -h
用法:git commit [<选项>] [--] <路径规格>...

    -q, --quiet           提交成功后不显示概述信息
    -v, --verbose         在提交说明模板里显示差异

提交说明选项
    -F, --file <文件>     从文件中读取提交说明
    --author <作者>       提交时覆盖作者
    --date <日期>         提交时覆盖日期
    -m, --message <说明>  提交说明
    -c, --reedit-message <提交>
                          重用并编辑指定提交的提交说明
    -C, --reuse-message <提交>
                          重用指定提交的提交说明
    --fixup <提交>        使用 autosquash 格式的提交说明用以修正指定的提交
    --squash <提交>       使用 autosquash 格式的提交说明用以压缩至指定的提交
    --reset-author        现在将该提交的作者改为我(和 -C/-c/--amend 参数共用)
    -s, --signoff         添加 Signed-off-by: 签名
    -t, --template <文件>
                          使用指定的模板文件
    -e, --edit            强制编辑提交
    --cleanup <default>   设置如何删除提交说明里的空格和#注释
    --status              在提交说明模板里包含状态信息
    -S, --gpg-sign[=<key-id>]
                          GPG 提交签名

提交内容选项
    -a, --all             提交所有改动的文件 # 前提是此文件被追踪
    -i, --include         添加指定的文件到索引区等待提交
    --interactive         交互式添加文件
    -p, --patch           交互式添加变更
    -o, --only            只提交指定的文件
    -n, --no-verify       绕过 pre-commit 和 commit-msg 钩子
    --dry-run             显示将要提交的内容
    --short               以简洁的格式显示状态
    --branch              显示分支信息
    --ahead-behind        计算完整的领先/落后值
    --porcelain           机器可读的输出
    --long                以长格式显示状态(默认)
    -z, --null            条目以 NUL 字符结尾
    --amend               修改先前的提交
    --no-post-rewrite     绕过 post-rewrite 钩子
    -u, --untracked-files[=<模式>]
                          显示未跟踪的文件,“模式”的可选参数:all、normal、no。(默认:all)

rock@wtgg:~$ 

4. git branch (分支)的参数

git checkout -b feature-x develop 本地从develop分支上创建一个feature-x分支,并切换到该分支上
它相当于这2条命令的合并:
git branch feature-x develop
git checkout feature-x

git checkout develop # 切换回develop 分支
git merge --no-ff feature-x 合并feature-x分支,加上--no-ff参数会保留版本演进路线,否则默认会执行"快进式合并"(fast-farward merge),会直接将feature-x分支指向Develop分支
git branch -d feature-x # 本地删除feature-x分支-d是删除,如果该分支还没有被合并,会删除提示删除失败,-D是强制删除。
git push origin -d <BranchName> # 删除远程分支
或者git push origin(远程仓库名,不一定是origin) :远程分支名 # 注意origin:远程分支之间有一个空格,这里原本应该是写本地分支,现在留空,即把一个空的分支推送到远程的某个分支,相当于把远程的这个分支删除!
git branch -r 列出所有的远程分支
git branch -a 列出所有本地和远程分支
git remote -v 列出远程仓库的信息
例如

λ git remote -v # 本项目关联了github和码云2个远程仓库。2个远程仓库的名字都不是origin,分别是gitee和github
gitee   https://gitee.com/wtgg/my_spiders.git (fetch)
gitee   https://gitee.com/wtgg/my_spiders.git (push)
github  https://github.com/wtgg/my_spiders.git (fetch)
github  https://github.com/wtgg/my_spiders.git (push)
rock@wtgg:~$ git branch -h
用法:git branch [<选项>] [-r | -a] [--merged | --no-merged]
  或:git branch [<选项>] [-l] [-f] <分支名> [<起始点>]
  或:git branch [<选项>] [-r] (-d | -D) <分支名>...
  或:git branch [<选项>] (-m | -M) [<旧分支>] <新分支>
  或:git branch [<选项>] (-c | -C) [<老分支>] <新分支>
  或:git branch [<选项>] [-r | -a] [--points-at]
  或:git branch [<选项>] [-r | -a] [--format]

通用选项
    -v, --verbose         显示哈希值和主题,若参数出现两次则显示上游分支
    -q, --quiet           不显示信息
    -t, --track           设置跟踪模式(参见 git-pull(1))
    -u, --set-upstream-to <上游>
                          改变上游信息
    --unset-upstream      取消上游信息的设置
    --color[=<何时>]      使用彩色输出
    -r, --remotes         作用于远程跟踪分支
    --contains <提交>     只打印包含该提交的分支
    --no-contains <提交>  只打印不包含该提交的分支
    --abbrev[=<n>]        用 <n> 位数字显示 SHA-1 哈希值

具体的 git-branch 动作:
    -a, --all             列出远程跟踪及本地分支
    -d, --delete          删除完全合并的分支
    -D                    删除分支(即使没有合并)
    -m, --move            移动/重命名一个分支,以及它的引用日志
    -M                    移动/重命名一个分支,即使目标已存在
    -c, --copy            拷贝一个分支和它的引用日志
    -C                    拷贝一个分支,即使目标已存在
    --list                列出分支名
    -l, --create-reflog   创建分支的引用日志
    --edit-description    标记分支的描述
    -f, --force           强制创建、移动/重命名、删除
    --merged <提交>       只打印已经合并的分支
    --no-merged <提交>    只打印尚未合并的分支
    --column[=<风格>]     以列的方式显示分支
    --sort <key>          排序的字段名
    --points-at <对象>    只打印指向该对象的分支
    -i, --ignore-case     排序和过滤属于大小写不敏感
    --format <格式>       输出格式

rock@wtgg:~$ 

5. git merge (合并)的参数

rock@wtgg:~$ git merge -h
用法:git merge [<选项>] [<提交>...]
  或:git merge --abort
  或:git merge --continue

    -n                    在合并的最后不显示差异统计
    --stat                在合并的最后显示差异统计
    --summary             (和 --stat 同义)
    --log[=<n>]           在合并提交信息中添加(最多 <n> 条)精简提交记录
    --squash              创建一个单独的提交而不是做一次合并
    --commit              如果合并成功,执行一次提交(默认)
    -e, --edit            在提交前编辑提交说明
    --ff                  允许快进(默认)
    --ff-only             如果不能快进就放弃合并
    --rerere-autoupdate   如果可能,重用冲突解决更新索引
    --verify-signatures   验证指定的提交是否包含一个有效的 GPG 签名
    -s, --strategy <策略>
                          要使用的合并策略
    -X, --strategy-option <option=value>
                          所选的合并策略的选项
    -m, --message <说明>  合并的提交说明(针对非快进式合并)
    -v, --verbose         更加详细
    -q, --quiet           更加安静
    --abort               放弃当前正在进行的合并
    --continue            继续当前正在进行的合并
    --allow-unrelated-histories
                          允许合并不相关的历史
    --progress            强制显示进度报告
    -S, --gpg-sign[=<key-id>]
                          GPG 提交签名
    --overwrite-ignore    更新忽略的文件(默认)
    --signoff             添加 Signed-off-by: 签名
    --verify              校验 commit-msg 钩子

rock@wtgg:~$ 

合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

6. git push 推送

先在Github 或者coding.net 或者码云 上面新建代码仓库,复制仓库的ssh或者https地址

$ git remote add origin git@git.coding.net:xxx/xxx.git 关联远程仓库

$ git push -u origin master 第一次推送时 加上-u 参数。

以后每次git push origin 本地仓库:远程仓库 就可以推送了。

如果本地仓库和远程仓库同名。可以简化为:git push origin 仓库名

其中 origin是远程仓库的代称,也可以是别的名字,比如
git remote add github https://github.com/wtgg/my_spiders.git # 关联我github上的my_spiders项目仓库,远程仓库取名github,而不是origin,
git remote add gitee https://gitee.com/wtgg/my_spiders.git # 关联我码云上的my_spiders项目仓库,远程仓库取名为gitee。同一个项目关联2个远程仓库,所以2个远程仓库取了不同的名字。
推送的时候
git push github master # 把项目推送到github的master分支
git push gitee master # 把项目推送到码云的master分支
如果要推送分支:
git push github dev:dev # 推送本地的dev分支到github的dev分支
git push gitee dev:dev # 推送本地的dev分支到码云的dev分支

git pull origin <远程分支>:<本地分支>
git push origin <本地分支>:<远程分支>
rock@wtgg:~$ git push -h
用法:git push [<选项>] [<仓库> [<引用规格>...]]

    -v, --verbose         更加详细
    -q, --quiet           更加安静
    --repo <仓库>         仓库
    --all                 推送所有引用
    --mirror              镜像所有引用
    -d, --delete          删除引用
    --tags                推送标签(不能使用 --all or --mirror)
    -n, --dry-run         演习
    --porcelain           机器可读的输出
    -f, --force           强制更新
    --force-with-lease[=<引用名>:<期望值>]
                          要求引用旧的取值为设定值
    --recurse-submodules[=<check|on-demand|no>]
                          控制子模组的递归推送
    --thin                使用精简打包
    --receive-pack <receive-pack>
                          接收包程序
    --exec <receive-pack>
                          接收包程序
    -u, --set-upstream    设置 git pull/status 的上游
    --progress            强制显示进度报告
    --prune               清除本地删除的引用
    --no-verify           绕过 pre-push 钩子
    --follow-tags         推送缺失但有关的标签
    --signed[=<yes|no|if-asked>]
                          用 GPG 为推送签名
    --atomic              需要远端支持原子事务
    -o, --push-option <server-specific>
                          传输选项
    -4, --ipv4            只使用 IPv4 地址
    -6, --ipv6            只使用 IPv6 地址

7. git log 参数

rock@wtgg:~$ git log -h
用法:git log [<选项>] [<版本范围>] [[--] <路径>...]
  或:git show [<选项>] <对象>...

    -q, --quiet           不显示差异输出
    --source              显示源
    --use-mailmap         使用邮件映射文件
    --decorate-refs <模式>
                          只修饰与 <模式> 匹配的引用
    --decorate-refs-exclude <模式>
                          不修饰和 <模式> 匹配的引用
    --decorate[=...]      修饰选项
    -L <n,m:file>         处理文件中第 n 到 m 之间的行,从 1 开始

rock@wtgg:~$ 

$ git log --pretty=oneline; 以简明的信息显示版本号(40位16进制数字) 和 对应的提交信息,便于版本恢复。这个命令会显示所有项目成员与远程仓库同步的提交信息。

$ git reflog 显示当前用户每此的版本号(即commit id)与对应的提交信息,不过这里的版本号只显示前几位,也能用于恢复版本

8. git reset --hard 版本号 版本回退

rock@wtgg:~/PycharmProjects/abc$ git reset -h
用法:git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<提交>]
  或:git reset [-q] [<树或提交>] [--] <路径>...
  或:git reset --patch [<树或提交>] [--] [<路径>...]

    -q, --quiet           安静模式,只报告错误
    --mixed               重置 HEAD 和索引
    --soft                只重置 HEAD
    --hard                重置 HEAD、索引和工作区
    --merge               重置 HEAD、索引和工作区
    --keep                重置 HEAD 但保存本地变更
    --recurse-submodules[=<reset>]
                          control recursive updating of submodules
    -p, --patch           交互式挑选数据块
    -N, --intent-to-add   将删除的路径标记为稍后添加

9. 其他

git查看远程仓库地址命令

$ git remote -v
origin  git@git.coding.net:wtgg/note.git (fetch)
origin  git@git.coding.net:wtgg/note.git (push)

如果本地显示推送成功,但是在网页看不到更新。有可能是推送到别的地址上了。(有时候打开好几个仓库,复制粘贴了错的远端地址)

Git远程仓库地址变更本地如何修改

相关文章

  • 组件化(第一篇)

    组件化 git 常用操作指令 cocoapods的基本使用 cocoapods本地私有库 一、git 常用操作指令...

  • git的常用操作

    git的常用操作

  • GIt 操作补充

    常用的git操作命令 常用的git操作命令已经能够满足日常的工作需求 现补充一些高级命令 git branch -...

  • git使用整理

    git使用常用操作-常用基本命令 克隆:git clone 【url】 查看修改状态: git status (g...

  • GIT 版本管理 常用命令

    Git 常用命令流程图 Git常用操作命令: 初始化创建:$ git init //检出仓库:$ git clon...

  • 🍏常用 git 操作指北

    ? 常用 git 操作指南 ? git图形界面操作软件 ? 开发流程 git clone 拉取项目代码,不必多说 ...

  • git常用操作 🎀

    git常用操作 ? 基本知识 查看git信息 修改git配置 提交类操作 分支类操作 创建分支 查看分支 修改分支...

  • git常用操作命令

    git常用操作命令 1 git工作原理图 2 git远程操作 2.1 git clone 远程操作的第一步,通常是...

  • 真 git 操作大全 不会就看

    git 常用命令git 远程操作git 撤销操作 推酷git大全 react router4 中文文档 koa 简...

  • git常用操作

    git缩写配置: 在.gitconfig文件中添加: [alias] git常用操作: git clone 克隆一...

网友评论

      本文标题:git常用操作

      本文链接:https://www.haomeiwen.com/subject/rbworftx.html