test

1.Git设置

1-1 生成一个SSH key

~/.ssh目录下会生成id_rsaid_rsa.pub文件

id_rsa.pub的内容放在github或者gitlab上

ssh-keygen -t rsa -C "your_email@example.com"                   //填写自己的邮箱
​
代码参数含义:
    -t 指定密钥类型,默认是 rsa ,可以省略。
    -C 设置注释文字,比如邮箱。
    -f 指定密钥文件存储文件名。

1-2 配置

# 查看配置
git config --list                                  //查看配置
git config --list --show-origin                    //查看所有配置文件
git config -e --global                             //直接进入全局配置修改

# 配置全局用户名和邮箱
git config --global  user.name"lxd670"
git config --global  user.email"lxd670@qq.com"

# 初始化本地仓库
git init

2.分支

2-1 查看分支

git branch 查看本地所有分支

git branch -r 查看远程所有分支

git branch -a 查看远程+本地所有分支

git branch

* master

2-2 查看有没有合并分支

git branch --merged

git branch --no-merged

加上分支名就可以指定,不加分支名相当于当前分支名作为参考

# 可以查看哪些分支已经合并到当前分支,此列表下没有* 标记的分支可以删除,不会报错。
git branch --merged
git branch --merged master

  dev1
* master

# 查看还未合并到当前分支的分支,此时如果去删除未合并的分支,会报错的。与git branch --merged命令后边都可以加分支名称,这样可以查看指定分支的合并状态,而不用检出他们。
git branch --no-merged
git branch --no-merged master
dev2

2-3 创建分支

git branch [分支名]

git branch new1

* master
  new1

2-4 切换分支

git checkout [分支名]

git checkout dev1

# 标签已经切换到dev1分支了
Switched to branch 'dev1'

2-5 创建+切换

git checkout -b [分支名]

git checkout -b dev2

# 本质git branch dev2 && git checkout dev2
Switched to a new branch 'dev2'

2-6 重命名分支

git branch -m [分支名] [新分支名]

git branch -m dev2 dev3

2-7 删除分支

2-7-1 删除本地分支

git branch -d [分支名] or git branch -D [分支名]

git branch -d new1

* master

2-7-2 删除远程分支

git push origin --delete [分支名]

git push origin -d [分支名]

git push origin :[分支名]

# 效果都一样
git push origin --delete dev1
git push origin -d dev1
git push origin :dev1

2-8 查看所有分支信息

git branch -v

git branch -v

# 也会显示是否超前或者落后几个版本
* master a9966256 [ahead 1] test1
  dev1 as13e123 t1

2-9 查看当前的本地分支与远程分支的关联关系

git branch -vv

git branch -vv

# 表示和远程分支版本一样(对于远程分支的master)
* master a9966256 [origin/master] test1
# 表示落后远程分支2个版本
* master a9966256 [origin/master: behind 2] test1
# 表示超前远程分支1个版本
* master a9966256 [origin/master: ahead 1] test1
# 表示没有关联远程分支
* master a9966256 test1

2-10 关联远程分支

git branch -u origin/[远程分支] 把当前分支和远程分支做关联

git branch -u origin/[远程分支] [本地分支] 指定关联的分支名

git branch -u origin/master dev1

Branch 'dev1' set up to track remote branch 'master' from 'origin'.

2-11 本地分支推送到远程新建分支

# 把本地master分支推送带远端dev1分支
git push origin master:dev1

3.标签

3-1 创建tag

#轻量标签
  # 在当前commit创建一个tag
  git tag [tag_name]
  # 在指定的commit_id上创建tag
  git tag [tag_name] [commit_id]

# 附注标签
  # 在当前commit创建一个tag+tag说明
  git tag -a [tag_name] -m "tag message"

	git tag -a [tag_name] [commit_id] -m "tag message" 

3-2 查看tag

# 这个命令以字母顺序列出标签,但是它们显示的顺序并不重要
$ git tag

# 查找标签
$ git tag -l "v1.8.5*"
v1.8.5
v1.8.5-rc0
v1.8.5-rc1
v1.8.5-rc2
v1.8.5-rc3
v1.8.5.1
v1.8.5.2
v1.8.5.3
v1.8.5.4
v1.8.5.5

查看-附注标签

输出显示了打标签者的信息、打标签的日期时间、附注信息,然后显示具体的提交信息。

$ git show v1.4
tag v1.4
Tagger: Ben Straub <ben@straub.cc>
Date:   Sat May 3 20:19:12 2014 -0700

my version 1.4

commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Mon Mar 17 21:52:11 2008 -0700

    changed the version number

查看-轻量标签

只会显示出提交信息

$ git show v1.4-lw
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Mon Mar 17 21:52:11 2008 -0700

    changed the version number

3-3 删除tag

git tag -d [tag_name]

修改时更新git commit author date

commit 681039be4f644ff49938c2625dd82ecf1141b299 (HEAD -> master)
Author: lxd01243683 <lxd01243683@alibaba-inc.com>
Date:   Mon Jun 20 11:21:09 2022 +0800

    Adjust log records
# 方法一
git commit --amend --date="$(date -R)"
# 方法二
git commit --amend --reset-author
commit 995779586e65b5cdcce1ccbdc490303c6597c6e2 (HEAD -> master)
Author: lxd01243683 <lxd01243683@alibaba-inc.com>
Date:   Tue Jun 21 09:44:53 2022 +0800

    Adjust log records

查看本地

git logs

b2d1sd2 (modified:, 2022-06-23)	# 本地修改(未提交到远程)
ab35dd8 (set 1.txt, 2022-06-23)

使用git pull拉取代码

git pull
# 表示自动合并失败
Auto-merging 1.txt	
CONFLICT (content): Merge conflict in 1.txt
Automatic merge failed; fix conflicts and then commit the result.

git status
On branch master
Your branch and 'origin/master' have diverged,
and have 1 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add <file>..." to mark resolution)
        both modified:   1.txt

冲突文件

test
<<<<<<< HEAD
addadd				# 这里是自己本地改动的
=======
1111					# 这里是远程改动的
>>>>>>> 22ee1d39e61f17798d73447a8c75080e0dc6fb4d

保留自己本地的

test
1111

保留远程的

test
addadd

同时保留

test
addadd
1111

同时删除

test
git add .
git commit -m 'ccc'
git logs

5f9f403 (ccc, 2022-06-23)
22ee1d3 (add 1111, 2022-06-23)
ab35dd8 (set 1.txt, 2022-06-23)

还原文件

取消git变动文件(没有添加到暂存区)

git restore [file_name] ...

git checkout -- [file_name] ...

取消暂存区文件到追加区

git restore --staged [file_name] ...

git reset HEAD [file_name] ...

修改已提交的commit信息

# 进入vim编辑
git commit --amend

# 直接修改
git commit --amend -m "xxxx"

列出commit-id对应的tag

git ls-remote --tags

From ssh://git@gitlab.alibaba-inc.com/hologram/holo-build.git
bacf34db2f543717a87aeea12332274359404060        refs/tags/0.10-rc4
41c1f88aacf368d4cb0762ee91bbe85c0cdc3403        refs/tags/0.10.0-rc0
f0c66526dcc0220be08ebf91af7789265278d753        refs/tags/0.10.0-rc1
4b6c2c9cbc3caa936de21bc45edba54710cfbd15        refs/tags/0.10.0-rc10

rev-parse打印hash值

--short显示短的commit id

验证指定的对象是一个有效的 git 对象

# 成功返回commit id
git rev-parse --verify 804e239ee884c929e452f
804e239ee884c929e452f69602da523531df0498
# 错误
git rev-parse --verify 804e239ee884c92asdad
fatal: Needed a single revision

查看commit id

# 通过tag标签获取commit
git rev-parse 1.3.1-rc28
db7c8eaa4f1b0ca9f5afdb99fede7250d387f86b

# 获取当前的commit id
git rev-parse HEAD
9093ea3364666955cf3f882b5268dc943dc3c693

master分支改动的代码复制到其他分支

git clone xxxx.git xx_file
cd xx_file

git logs -3
# 获取最新的commit id

# 切换分支
git checkout release-1.3.x-tpch

# 把master的commit摘过来
git cherry-pick [commit-id]

本地有远程分支,但是远程已经被删除了

git branch -r 查看的是本地.git/refs/remotes/origin下的branch

# 查看远程情况
# tracked表示被跟踪的
git remote show origin
* remote origin
  Fetch URL: git@gitlab.alibaba-inc.com:hologram/holo-build.git
  Push  URL: git@gitlab.alibaba-inc.com:hologram/holo-build.git
  HEAD branch: master
  Remote branches:
    AddUsers                         tracked
    aaa                              tracked
	Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)
    
    
# 都会清理无效的branch
	# 远程同步,会自动修剪无用的branch
  git fetch --prune

  git remote prune

git checkout

# 使用-b时,如果分支名和远程分(已存在的)支名相同的话,不会关联
git checkout -b [branch_name]

# 如果创建的分支名和远程(已存在的)分支名一样,那么会自动关联
git checkout [branch_name]

# 查看本地分支关联情况
# behind表示落后于远程分支几次commit数量[origin/master: behind 3]
# ahead表示本地分支超前远程分支几次commit数量[origin/master: ahead 2]
git branch -vv
  master        d75eb370 [origin/master] "commit_message"
  release-1.1.x fd683308 "commit_message"
* release-1.3.x 6a5e18b8 [origin/release-1.3.x] "commit_message"

# 同步远程分支
git checkout master && git merge origin/master

git fetch和git pull

git pull -r报错

如果文件被add了,但是没有commit时候,使用git pull -r会报错

# 报错
git pull -r
error: cannot pull with rebase: Your index contains uncommitted changes.
error: please commit or stash them.

# 查看状态
git status
On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   plugin/ccc.py

解决方法一:撤销文件

# 把文件撤销
git restore --staged plugin/ccc.py

# 重新再pull
git pull -r
Already up to date.

解决方案二:stash文件

git stash
Saved working directory and index state WIP on master: 0c81090 [Holo to #42873391] xxxxx


git pull -r
Already up to date.

解决方案二:增加commit

git commit -m "test"
[master 314b0ce] test
 1 file changed, 72 insertions(+)
 create mode 100755 plugin/ccc.py
 
git pull -r
Successfully rebased and updated refs/heads/master.

push

# 把本地分支上传到远程分支
git push origin [xxxx]


# 把本地分支上传到远程分支,并且和远程分支绑定
git push -u origin [xxxx]

# 效果一样
git push -u origin ccc
git push origin 本地分支名:远程分支名

$git push origin ccc:ccc
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
To gitlab.alibaba-inc.com:lxd01243683/test.git
 * [new branch]      ccc -> ccc
git fetch origin refs/merge-requests/{code_id}/head
git cherry-pick FETCH_HEAD
posted @ 2023-03-07 10:08  lxd670  阅读(7)  评论(0编辑  收藏  举报