git常用操作

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远程仓库地址变更本地如何修改

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容

  • 获取与创建项目 创建仓库的途径有:在本地已有的目录,初始化一个新的;克隆复制一份别人的项目。 git init 在...
    daking阅读 6,576评论 3 48
  • 1)远程仓库相关命令 检出仓库:$ git clone git://github.com/jquery/jquer...
    Jeff_Tsui阅读 336评论 0 0
  • 本篇的基础知识: git常用操作命令 cocoapods基本使用 cocoapods本地私有库的使用 cocoap...
    Lovell_阅读 595评论 1 0
  • 每个人曾经都是一身傲气,拥有一颗不平凡的心,奈何现实生活所迫,不得不选择屈服,学会与生活妥协,逐渐成熟。 高中...
    光行恠阅读 218评论 0 3
  • 1 大鹏和小鹏两兄弟,一个10岁、一个4岁,差了6岁。大鹏活泼好动、能编爱说。爱遐想、爱幻想,老师称其奇才小帅哥。...
    快乐巴特阅读 246评论 0 0