zoukankan      html  css  js  c++  java
  • git 经常使用操作集锦

     

    创建仓库

    新建普通仓库:

    jxdong@ubuntu-server:~/workspace/git$ git init 
    Reinitialized existing Git repository in /home/jxdong/workspace/git/.git/

    新建 bare 仓库:

    jxdong@ubuntu-server:~/workspace/git.git$ git init --bare 
    Initialized empty Git repository in /home/jxdong/workspace/git.git/

    bare 仓库里面不包括源码,仅仅具有版本号管理管理功能,无法运行 checkout 等代码管理操作:
    jxdong@ubuntu-server:~/workspace/git.git$ ls 
    branches  config  description  HEAD  hooks  info  objects  refs

    克隆仓库

    克隆普通 git 仓库:

    jxdong@ubuntu-server:~/workspace$ git clone git git_1
    Cloning into 'git_1'...
    done.
    warning: You appear to have cloned an empty repository.

    克隆为 bare 仓库:

    jxdong@ubuntu-server:~/workspace$ git clone git git_1.git --bare  
    Cloning into bare repository 'git_1.git'...
    done.
    warning: You appear to have cloned an empty repository.

    由于我们的仓库里面没有提交,所以 git 提示我们克隆了空的仓库

    提交代码

    第一次提交初始化的版本号能够是什么都没有:

    jxdong@ubuntu-server:~/workspace/git$ git commit -m "init: first version." --allow-empty
    [master (root-commit) 8a22ddf] init: first version.

    jxdong@ubuntu-server:~/workspace/git$ git log 
    commit 8a22ddfaaf374531dbdba02ef40bb10006057f6f
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:40:15 2014 +0800
        init: first version.

    加入项目文件

    jxdong@ubuntu-server:~/workspace/git$ echo test > myfile1.txt
    jxdong@ubuntu-server:~/workspace/git$ git add myfile1.txt

    提交到本地仓库


    jxdong@ubuntu-server:~/workspace/git$ git commit -m "work: add file1"
    [master 8ed6d03] work: add file1
    1 file changed, 1 insertion(+)
    create mode 100644 myfile1.txt

    查看历史


    jxdong@ubuntu-server:~/workspace/git$ git log 
    commit 8ed6d030278c0aef63052d6ba1946281c8a50ec8
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:43:52 2014 +0800
        work: add file1
    commit 8a22ddfaaf374531dbdba02ef40bb10006057f6f
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:40:15 2014 +0800
        init: first version.

    回退版本号

    作为提交的回退

    revert 会撤销一次 commit 并把撤销操作作为 commit 提交,所以历史里面包括这次撤销操作的 commit

    jxdong@ubuntu-server:~/workspace/git$ git log 
    commit 746d6596b7d5b84db9c27ceef1063be977510c4e
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:44:22 2014 +0800
        Revert "work: add file1"
        This reverts commit 8ed6d030278c0aef63052d6ba1946281c8a50ec8.
    commit 8ed6d030278c0aef63052d6ba1946281c8a50ec8
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:43:52 2014 +0800
        work: add file1
    commit 8a22ddfaaf374531dbdba02ef40bb10006057f6f
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:40:15 2014 +0800
        init: first version.
    jxdong@ubuntu-server:~/workspace/git$ ls

    强制删除一次提交

    reset 与 –hard 參数,将会真正去掉这次commit, 将会删除 git 历史。比較危急,用于那些失败的 提交。

    jxdong@ubuntu-server:~/workspace/git$ git reset --hard HEAD~1
    HEAD is now at 8ed6d03 work: add file1
    jxdong@ubuntu-server:~/workspace/git$ git log 
    commit 8ed6d030278c0aef63052d6ba1946281c8a50ec8
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:43:52 2014 +0800
        work: add file1
    commit 8a22ddfaaf374531dbdba02ef40bb10006057f6f
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:40:15 2014 +0800
        init: first version.
    jxdong@ubuntu-server:~/workspace/git$ ls 
    myfile1.txt

    改动提交历史

    我们再加入一个文件,并提交。

    jxdong@ubuntu-server:~/workspace/git$ echo test > myfile2.txt  
    jxdong@ubuntu-server:~/workspace/git$ git add myfile2.txt
    jxdong@ubuntu-server:~/workspace/git$ git commit -m "work: add file2"
    [master 021f89c] work: add file2
    1 file changed, 1 insertion(+)
    create mode 100644 myfile2.txt
    jxdong@ubuntu-server:~/workspace/git$ git log 
    commit 021f89cfd5aa195cd841eb0e64a2d712cc1f8356
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:45:49 2014 +0800
        work: add file2
    commit 8ed6d030278c0aef63052d6ba1946281c8a50ec8
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:43:52 2014 +0800
        work: add file1
    commit 8a22ddfaaf374531dbdba02ef40bb10006057f6f
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:40:15 2014 +0800
        init: first version.

    rebase 命令能够回退到指定的提交处,然后改动这次提交之后的历史。

    包括的功能:

    1. pick,採用这次提交,什么也不做
    2. reword,採用这次提交,仅仅是改动提交信息
    3. edit,採用提交,并停在这次提交这里,你能够開始改动这次提交
    4. squash,合并提交,将这次提交合并到之前的一次提交里面
    5. fixup,与squash 一致,直接合并忽略提交信息
    6. x,exec,运行一些命令

    这里以合并为例

    jxdong@ubuntu-server:~/workspace/git$ git rebase -i 8a22ddfaaf374531dbdba02ef40bb10006057f6f
    pick 8ed6d03 work: add file1
    pick 021f89c work: add file2
    # Rebase 8a22ddf..021f89c onto 8a22ddf
    #
    # Commands:
    #  p, pick = use commit
    #  r, reword = use commit, but edit the commit message
    #  e, edit = use commit, but stop for amending
    #  s, squash = use commit, but meld into previous commit
    #  f, fixup = like "squash", but discard this commit's log message
    #  x, exec = run command (the rest of the line) using shell
    #
    # If you remove a line here THAT COMMIT WILL BE LOST.
    # However, if you remove everything, the rebase will be aborted.
    #

    ".git/rebase-merge/git-rebase-todo" 16L, 542C written                                 
    Rebasing (2/2)
    # This is a combination of 2 commits.
    # The first commit's message is:
    work: add file1
    # This is the 2nd commit message:
    work: add file2
    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    # Not currently on any branch.
    # Changes to be committed:
    #   (use "git reset HEAD <file>..." to unstage)
    #
    #       new file:   myfile1.txt
    #       new file:   myfile2.txt
    #
                                                                                                                
    ~                                                                                                       
    ".git/COMMIT_EDITMSG" 18L, 438C written
    [detached HEAD a5d9008] work: add file1
    2 files changed, 2 insertions(+)
    create mode 100644 myfile1.txt
    create mode 100644 myfile2.txt
    Successfully rebased and updated refs/heads/master.

    看一下,合并后的历史
    jxdong@ubuntu-server:~/workspace/git$ git log 
    commit a5d9008e0d87302ed1dc9c5fa8957294efc3e403
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:43:52 2014 +0800
        work: add file1
        work: add file2
    commit 8a22ddfaaf374531dbdba02ef40bb10006057f6f
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:40:15 2014 +0800
        init: first version.

    生成补丁

    补丁的生成,-n 后面数字表示将要生成之前的多少次提交作为布丁。

    jxdong@ubuntu-server:~/workspace/git$ git format-patch -n1
    0001-work-add-file1.patch

    应用布丁

    应用布丁,须要具有同样祖先的 git 仓库,以避免错误,我们開始克隆过一个仓库,他们是来自同一个祖先

    jxdong@ubuntu-server:~/workspace/git$ cd ..
    jxdong@ubuntu-server:~/workspace$ cd git
    git/       git_1/     git_1.git/ git.git/   
    jxdong@ubuntu-server:~/workspace$ cd git_1
    git_1/     git_1.git/ 
    jxdong@ubuntu-server:~/workspace$ cd git_1
    jxdong@ubuntu-server:~/workspace/git_1$ git am ../git/0001-work-add-file1.patch
    Applying: work: add file1
    applying to an empty history

    获取远端仓库代码

    加入远端

    jxdong@ubuntu-server:~/workspace/git_1$ git remote add git ../git

    获代替码


    jxdong@ubuntu-server:~/workspace/git_1$ git fetch git 
    warning: no common commits
    remote: Counting objects: 5, done.
    remote: Compressing objects: 100% (3/3), done.
    remote: Total 5 (delta 0), reused 0 (delta 0)
    Unpacking objects: 100% (5/5), done.
    From ../git
    * [new branch]      master     -> git/master

    查看全部分支

    jxdong@ubuntu-server:~/workspace/git_1$ git branch -a
    * master
      remotes/git/master

    表示当前在本地的 master 分支,我们另一个远端叫 git 的仓库,里面包括一个 master 分支

    合并分支

    我们先在分支上再提交一次,这次也加入一个文件。

    jxdong@ubuntu-server:~/workspace/git_1$ echo test2 > myfile2.txt 
    jxdong@ubuntu-server:~/workspace/git_1$ git commit -m "work: modfy file2"
    # 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:   myfile2.txt
    #
    no changes added to commit (use "git add" and/or "git commit -a")
    jxdong@ubuntu-server:~/workspace/git_1$ git commit -am "work: modfy file2"
    [master 503a6c9] work: modfy file2
    1 file changed, 1 insertion(+), 1 deletion(-)
    jxdong@ubuntu-server:~/workspace/git_1$ git log 
    commit 503a6c922a6a0f0fc298c1b5b8289fd2babb435c
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:50:30 2014 +0800
        work: modfy file2
    commit 24651eb534f5f4db86e61e62f48d7959aaaf4e65
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:43:52 2014 +0800
        work: add file1
        work: add file2

    合并分支

    jxdong@ubuntu-server:~/workspace/git_1$ git merge git/master 
    Auto-merging myfile2.txt
    CONFLICT (add/add): Merge conflict in myfile2.txt
    Automatic merge failed; fix conflicts and then commit the result.

    处理冲突

    首先查看冲突


    jxdong@ubuntu-server:~/workspace/git_1$ git diff
    diff --cc myfile2.txt
    index 180cf83,9daeafb..0000000
    --- a/myfile2.txt
    +++ b/myfile2.txt
    @@@ -1,1 -1,1 +1,5 @@@
    ++<<<<<<< HEAD
    +test2
    ++=======
    + test
    ++>>>>>>> git/master

    改动冲突并提交

    解决冲突主要是看须要保留本地的内容还是要合并的内容

    jxdong@ubuntu-server:~/workspace/git_1$ git commit -a
    Merge remote-tracking branch 'git/master'
    Conflicts:
            myfile2.txt
    #
    # It looks like you may be committing a merge.
    # If this is not correct, please remove the file
    #       .git/MERGE_HEAD
    # and try again.
    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    # On branch master

    提交完毕合并成功  

    jxdong@ubuntu-server:~/workspace/git_1$ git log 
    commit d1feccc31ba37983e2d217ec7b497bffebdde3f1
    Merge: 503a6c9 a5d9008
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:56:46 2014 +0800
        Merge remote-tracking branch 'git/master'
        Conflicts:
            myfile2.txt
    commit 503a6c922a6a0f0fc298c1b5b8289fd2babb435c
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:50:30 2014 +0800
        work: modfy file2
    commit 24651eb534f5f4db86e61e62f48d7959aaaf4e65
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:43:52 2014 +0800
        work: add file1
        work: add file2
    commit a5d9008e0d87302ed1dc9c5fa8957294efc3e403
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:43:52 2014 +0800
        work: add file1
        work: add file2
    commit 8a22ddfaaf374531dbdba02ef40bb10006057f6f
    Author: Royce Jiang <jiangxd@embedinfo.com>
    Date:   Fri May 30 11:40:15 2014 +0800

  • 相关阅读:
    未来 3-5 年信息安全行业会如何变化,目前可以观察到的变化有哪些?
    信息安全经典书籍
    Apparmor——Linux内核中的强制访问控制系统
    深入理解SELinux
    FreebuF黑客专访系列之吴翰清(刺):接下来几年,有两样东西必定会火
    Security Checklist (路由器安全checklist)
    CPU MPU MCU SOC SOPC关系及区别
    军火库(第一期):无线电硬件安全大牛都用哪些利器?
    华为V-ISA信誉安全体系:对付新型DDoS攻击的利器
    物联网兴起 嵌入式系统安全日益受关注
  • 原文地址:https://www.cnblogs.com/blfshiye/p/3765739.html
Copyright © 2011-2022 走看看