• Git 学习笔记


    git基本操作

    Git 学习

    git基本操作

    git --help : 查看git常见命令

    git clone:得到一个项目的拷贝

    eg:git clone git://git.kernel.org/pub/scm/git/git.git 。如果访问一个Git URL需要用法名和密码,可以在Git URL 前加上用户名,并用@符号表示分割

    touch file:新建一个内容为空的文件

    ls -b:显示文件列表

    ls -a:显示所有文件

    git status (-s):查看上次提交之后是否有修改(加-s获得简短的输出)

    git diff:查看未缓存的改动

    git diff --cached:查看已经缓存的改动

    git add . /file name:将想要的快照写入缓存

    git commit:将缓存法人内容添加到仓库中,Git 为你的每一个提交都记录你的名字与电子邮箱地址,所以第一步需要配置用户名和邮箱地址

    git commit -m '第一次版本提交'

    git commit -am ‘修改的hello.php文件’: 如果你觉得 git add 提交缓存的流程太过繁琐,Git 也允许你用 -a 选项跳过这一步。

    git reset HEAD file : 取消某文件的缓存(我们将某文件add到缓冲区后)

    git rm:从git中移除某个文件,就必须从已经跟踪文件清单中移除,然后提交。git rm -f file:如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f

    git rm --cached file : 如果把文件从暂存区域移除,但仍然希望保留在当前工作目录中,换句话说,仅是从跟踪清单中删除,使用 --cached 选项即可

    git mv README README.md :用于移动或重命名一个文件目录。软连接

    分支管理

    git branch (branchname) : 创建分支

    注:在当前分支(A)下创建新的分支(B),那么B和创建时刻的A是相同的(可以认为B复制了A)

    git checkout(branchname):切换分支

    当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录。

    git merge:合并分支(你可以多次合并到统一分支, 也可以选择在合并之后直接删除被并入的分支。 )

    git branch:列出分支

    git branch -r:列出所有远程分支

    git branch -a : 列出所有本地和远程分支

    eg: *master :此例的意思就是,我们有一个叫做 master 的分支,并且该分支是当前分支。

    当你执行 git init 的时候,默认情况下 Git 就会为你创建 master 分支。

    如果我们要手动创建一个分支。执行git branch (branchname)即可

    echo .... >filename : 创建文件并将 .... 作为文件初始内容

    git checkout -b (branchname) :创建分支,并切换到该分支下

    git branch -d (branchname):删除分支

    git merge : 合并分支(一旦某分支有了独立内容,你终究会希望将它合并回到你的主分支 )

    cat file / cat file1 file2> traget_file : 打印文件/将多个文件合并到一个文件

    查看提交历史

    git log : 列出历史提交记录

    git log --oneline:简洁版列出历史提交记录

    git log --reverse --oneline : 逆向显示所有日志

    git log --author= authorname --oneline :查找指定用户的提交日志

    git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges : 指定日期

    如果我要看 Git 项目中三周前且在四月十八日之后的所有提交,我可以执行这个(我还用了 --no-merges 选项以隐藏合并提交):

    标签

    git tag -a v1.0 85fc7e7 : 给85fc7e7追加标签

    git tag -a v1.0 : 给最新一次提交打上标签

    git tag -d [name] : 删除版本

    git tag -r : 查看远程版本

    git push origin [name] : 创建远程版本(本地版本push到远程)

    git push origin :refs/tags/[name] : 删除远程版本

    git pull origin --tags : 合并远程仓库的tag到本地

    git push origin --tags : 上传本地tag到远程仓库

    Git Github

    git remote add [name]+[url]:添加远程仓库

    git remote set-url --push [name] + [newurl]:修改远程仓库

    git pull [remoteName]+[localBranchName]:拉取远程仓库

    git push [remoteName]+[localBranchName]:推送到远程仓库

    git push origin test:master : 提交本地test分支作为远程的master分支

    提交到Github

    git remote add origin git@github.com:csushl/runoob-git-test.git :添加新的远程仓库

    git push -u origin master

    git push [alias] + [branch] : 以上命令将你的 [branch] 分支推送成为 [alias] 远程仓库上的 [branch] 分支

    git remote (-v) : 查看当前配置有哪些仓库(加-v,还可以看到每个别名的实际链接地址)

    在线修改,然后本地更新修改

    git fetch origin(仓库)(master): 从远程仓库下载新分支与数据到本地(不合并)

    该命令执行完后需要执行git merge 远程分支到你所在的分支。

    git merge origin/master(分支) : 从远端仓库提取数据并尝试合并到当前分支

    git pull origin master:是将远程主机的master分支最新内容拉下来后与当前本地分支直接合并 fetch+merge

    推送到远程仓库

    eg:

    $ touch runoob-test.txt      # 添加文件
    $ git add runoob-test.txt
    $ git commit -m "添加到远程"
    master 69e702d] 添加到远程
    1 file changed, 0 insertions(+), 0 deletions(-)
    create mode 100644 runoob-test.txt

    $ git push origin master    # 推送到 Github

    git push origin master : 推送到 Github

    git remote rm (仓库名):删除远程仓库

    git reset

    git reset --soft :回退到某个版本,只回退了commit的信息,不会回复到Index file一级(即git add 一级),如果还要提交,直接commit即可。 参数只告诉git 讲其他的commit重置到HEAD,就此而已。index和working copy中的文件都不改变。

    git reset --mixed (默认): 回退到某个版本,只保留源码,回退commit和add 。 改变HEAD和Index,指向那个你要reset到的commit上。而working copy文件不被改变,当然会显示工作目录下有修改,但没有缓存到index中。

    git reset --hard : 三个地方同时改变(比较危险,执行之后,你的本地修改可能就丢失了)。

    git stash

    默认情况下, git stash 命令会把以下修改存储到一个新的堆栈中。堆栈中的内容(stash)可以被所有分支访问。

    • 暂存区中的修改

    • 工作区中已经存在的文件的修改

    也就是说,默认情况下,git stash命令不会存储下列文件。

    • 工作区中新增的文件(untracked files)

    • 被版本库忽略的文件(.gitignore中定义的)

    git stash -u :如果你还想要存储 untracked files,可以使用 -u 选项 .

    git stash -a : 如果你还想要存储 untracked files 和被版本库忽略的文件,可以使用 -a 选项。

    但是,一般不推荐这么做,因为既然是被版本库忽略的文件,就没有必要再存储起来。除非你有非常特别的需求。

    git stash save "message" : 在git stash 时候添加一个message注解

    执行 git stash 命令后,工作区就恢复到了上一次 git commit 时的状态。具体表现为:

    • 暂存区中的修改看不见了。

    • 工作区中已经存在的文件的修改也看不见了。

    • 如果使用了 -u 选项,工作区中新添加的文件对于工作区也看不见了。

    这样工作区就干净多了。使用 git diff 和 git diff --cached 也看不到工作区和暂存区中的修改了。因为它们都被存储到了一个堆栈中。

    然后,我们就可以新建分支,切换到新的分支来处理其他的需求。

    git stash save -u "message" : 储存到堆栈

    git stash list : 查看堆栈中的stash列表(堆栈中可能会有多个 stash,通过 stash_id 进行区分)

    git stash show / git stash show stash@{id} / git stash show -p :查看stash的内容

    git stash apply stash@{id}:将堆栈中的指定 stash 应用到工作区(保留堆栈的内容)

    git stash apply ( stash@{0} ) : 将堆栈中的最近一次 stash,应用到工作区(保留堆栈的内容)

    git stash pop : 将堆栈中的最近一次 stash,应用到工作区(删除堆栈的内容)

    git stash drop stash@{id} : 删除指定的stash

    git stash drop : 删除最近一次的stash

    git stash clear : 删除所有的stash

    git rebase

    --rebase不会产生合并的提交,它会将本地的所有提交临时保存为补丁(patch),放在”.git/rebase”目录中,然后将当前分支更新到最新的分支尖端,最后把保存的补丁应用到分支上.

         rebase的过程中,也许会出现冲突,Git会停止rebase并让你解决冲突,在解决完冲突之后,用git add去更新这些内容,然后无需执行commit,只需要:

         git rebase --continue就会继续打余下的补丁.

         git rebase --abort将会终止rebase,当前分支将会回到rebase之前的状态.

    cherry-pick

      git cherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作(操作的对象是commit)。例如,假设我们有个稳定版本的分支,叫v2.0,另外还有个开发版本的分支v3.0,我们不能直接把两个分支合并,这样会导致稳定版本混乱,但是又想增加一个v3.0中的功能到v2.0中,这里就可以使用cherry-pick了。

    就是对已经存在的commit进行再次提交:

    git cherry-pick commit-id

    可以使用git log查询commit id

    其他

    mkdir filename :当前目录下创建文件

    pwd : 显示当前目录

     

     

  • 相关阅读:
    [NOI Online 2021 提高组] 愤怒的小N
    [NOI Online 2021 提高组] 积木小赛
    「2020-2021 集训队作业」Yet Another Permutation Problem
    无标号有根树/无根树 计数
    无向图的 三元环
    有标号二分图计数
    有标号荒漠计数
    「雅礼集训 2018 Day8」B
    CF708E Student's Camp
    清华集训 2016 选做
  • 原文地址:https://www.cnblogs.com/csushl/p/12739545.html
Copyright © 2020-2023  润新知