主頁 > 移動端開發 > 常見Git命令匯總

常見Git命令匯總

2022-04-03 07:59:15 移動端開發

前言

最近,有朋友私信讓我就git 使用做篇文章分享,分享一下我在日常作業中是如何使用git的,我當場就收費兩包辣條,最后討價還價,朋友用1.5包辣條騙到了這篇文章,等他欣喜的走了我打算直接分享出來,氣死這個吝嗇鬼,當然最侄訓是希望本文對你有所幫助,

基礎概念

首先我們簡單的概述一下gitgit有三個磁區,分別是:

  • 作業區(Working Directory):開發者直接編輯的地方,只要檔案發生了更改,在這就會顯示出來,包含追蹤與未追蹤檔案,通過git add將作業區檔案添加到暫存區,

  • 暫存區(Stage | Index):資料暫時存放的區域,通過git commit將暫存區檔案添加到本地版本庫,

  • 本地版本庫(Local Commit History):存放所有已經提交的資料,通過git push推送到遠程倉庫,

基礎命令

git status

查看作業區狀態,如果跟蹤的檔案有做任何修改,都可以通過該命令來發現, 如:這里通過git status就發現在develop分支上,README.md檔案發生了更改,

jere@JereMBP GitTest (develop) $ git status
On branch develop
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   README.md

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

git diff

查看具體修改內容,比如在上一步中,我們通過git status發現README.md檔案發現了更改,這時我們可以通過git diff <file>來查看具體的修改內容:

jere@JereMBP GitTest (develop) $ git diff README.md
diff --git a/README.md b/README.md
index 7eb4917..3d6d2a4 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,5 @@
 # GitTest
 For git command practice
+
+do something on develop branch
+
jere@JereMBP GitTest (develop) $ 

另外,你也可以直接使用git diff,這樣就會顯示所有檔案的所有修改內容,

git checkout

切換分支,比如我在feature-1分支上切換到develop分支上:

jere@JereMBP GitTest (feature-1) $ git checkout develop 
Switched to branch 'develop'
jere@JereMBP GitTest (develop) $ 

在當前分支節點上新建一個分支并且切換過去,比如我在 main 分支上創建一個develop新分支并且切換過去:

jere@JereMBP GitTest (main) $ git checkout -b develop
Switched to a new branch 'develop'
jere@JereMBP GitTest (develop) $ git branch
* develop
  main

放棄作業區所作的修改,類似git restore <file>...,比如:我現在想放棄README.md中的修改

jere@JereMBP GitTest (develop) $ git status
On branch develop
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   README.md
	modified:   dev-file.txt

no changes added to commit (use "git add" and/or "git commit -a")
jere@JereMBP GitTest (develop) $ git checkout README.md
Updated 1 path from the index
jere@JereMBP GitTest (develop) $ git status
On branch develop
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   dev-file.txt

no changes added to commit (use "git add" and/or "git commit -a")
jere@JereMBP GitTest (develop) $ 

另外,如果你想放棄所有作業區中的修改,可以使用git checkout .來放棄所有修改,

git branch

查看本地分支情況:

jere@JereMBP GitTest (main) $ git branch
* main

查看遠程倉庫分支情況:

jere@JereMBP GitTest (develop) $ git branch --remote
  origin/HEAD -> origin/main
  origin/main

在當前節點上創建一個新分支,比如我在 develop 上創建一個feature-1新分支:

jere@JereMBP GitTest (develop) $ git branch feature-1
jere@JereMBP GitTest (develop) $ git branch
* develop
  feature-1
  main

另外,關于創建分支還有一些常用的操作可以了解一下,比如:

# 基于某個分支上開出新分支
$ git branch <new-branch> <base-branch>
# 基于某個提交開出新分支
$ git branch <new-branch> commit_hash
# 基于某個tag開出有新分支
$ git branch <new-branch> v1.1

洗掉分支

  • 洗掉本地分支:git branch -d <branch-name>
  • 洗掉遠程分支:git push -d origin <branch-name>

git add

將作業區所作的修改添加到暫存區,如將README.md檔案添加到暫存區:

jere@JereMBP GitTest (develop) $ git status
On branch develop
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")
jere@JereMBP GitTest (develop) $ git add README.md
jere@JereMBP GitTest (develop) $ git status
On branch develop
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   README.md

jere@JereMBP GitTest (develop) $ 

另外,你也可以通過git add .命令,這會將作業區所有的修改內容都添加到暫存區,

git commit

將暫存區中的內容保存到本地作業區,如上一步我們已經將README.md檔案添加到了暫存區,接下來就將它保存到本地作業區:

jere@JereMBP GitTest (develop) $ git commit -m "更改README檔案"
[develop b18e4f1] 更改README檔案
 1 file changed, 3 insertions(+)
jere@JereMBP GitTest (develop) $ git status
On branch develop
nothing to commit, working tree clean
jere@JereMBP GitTest (develop) $ 

另外,你也可以通過git commit -am來進行快速操作,其實它就是git add . & git commit -m的結合體,

git push

將本地檔案推送到遠程倉庫中,如:將上一步已經保存到本地的README.md檔案推送到遠程倉庫:

jere@JereMBP GitTest (develop) $ git push origin develop 
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 12 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 371 bytes | 371.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/JereChen11/GitTest.git
   1f7fb80..b18e4f1  develop -> develop
jere@JereMBP GitTest (develop) $ 

git fetch

查看遠程倉庫有沒有更新,有更新就下載下來,如果沒有更新就沒有任何反應,如:這里通過git fetch發現遠程倉庫中main分支有了新提交,所以將其下載了下來,

jere@JereMBP GitTest (develop) $ git fetch 
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/JereChen11/GitTest
   30f049e..d6ff31d  main       -> origin/main
jere@JereMBP GitTest (develop) $ git fetch 
jere@JereMBP GitTest (develop) $ 

git merge

合并分支,如:在上一步中,我們通過git fetch發現遠程 mian 分支有了新提交,所以當前本地main分支是落后的,所以這時候我們就應該將遠程 mian 分支合并到我們的本地main分支,來實作兩端同步,

jere@JereMBP GitTest (develop) $ git checkout main
Switched to branch 'main'
Your branch is behind 'origin/main' by 1 commit, and can be fast-forwarded.
  (use "git pull" to update your local branch)
jere@JereMBP GitTest (main) $ git merge origin/main 
Updating 30f049e..d6ff31d
Fast-forward
 README.md | 2 ++
 1 file changed, 2 insertions(+)
jere@JereMBP GitTest (main) $ 

git pull

拉取遠程倉庫,如果遠程倉庫有更新,則會將更新下載下來并合并到當前分支上,相當于git fetchgit merge的結合體, 如:跟上一步同樣,這次我們使用git pull來拉取遠程 mian 分支上的新提交,

jere@JereMBP GitTest (main) $ git pull
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/JereChen11/GitTest
   55e808c..4a1a531  main       -> origin/main
Updating 55e808c..4a1a531
Fast-forward
 README.md | 2 ++
 1 file changed, 2 insertions(+)

業務場景

除了上面幾個基礎命令,現在我根據我們平時的業務場景,配合案例再介紹幾個指令,

解決沖突

關于沖突,一旦涉及分支合并,且這兩個分支有對同一個地方做更改,就會出現沖突,

比如:在上一步中我們將遠程mian分支拉取了下來,發現他是對README.md檔案做了更改,而我們一開始的時候已經在develop分支上對README.md檔案相同位置上做了更改,這時候,如果我們嘗試將develop合并到main分支上時,就會出現沖突,

jere@JereMBP GitTest (main) $ git merge develop 
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.
jere@JereMBP GitTest (main) $ git status
On branch main
Your branch is up to date with 'origin/main'.

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

Changes to be committed:
	new file:   dev-file.txt

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

jere@JereMBP GitTest (main) $ 

正是README.md檔案發生了沖突,我們需要打開該檔案來查看具體沖突內容,

# GitTest
For git command practice

<<<<<<< HEAD
chagne README file on the main branch //內容1
=======
do something on develop branch //內容2
>>>>>>> develop

沖突的內容會被<<<<<<<>>>>>>>所包圍,中間用=======隔離開,也就如我所注釋的分成了內容1內容2兩塊,

  • 內容1:是當前所在分支節點的內容,也就是mian
  • 內容2:要合并進來分支的內容,也就是develop

選擇你要的內容,將<<<<<<<>>>>>>>=======這些隔離符洗掉掉,并保存,然后執行git addgit commit完成合并,

jere@JereMBP GitTest (main) $ vim README.md 
jere@JereMBP GitTest (main) $ git status
On branch main
Your branch is up to date with 'origin/main'.

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

Changes to be committed:
	new file:   dev-file.txt

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

jere@JereMBP GitTest (main) $ git commit -am "解決README沖突"
[main 8e08c23] 解決README沖突
jere@JereMBP GitTest (main) $ 

組員間同步開發進度

在實際專案中,我們都是多人配合協同開發,會將一些需求進行拆分,然后大家同時開發,開發完成后,各自將自己的代碼合并到develop分支上, 在這程序中,如果某個組員已經開發完了并且將代碼合并到了develop分支,而你還沒開發完,但是這時你想同步這個組員的代碼,這時應該怎么做呢?

這里我們就可以使用git rebase來做到,

git rebase操作,稱之為變基操作,也就是移動你的分支的根節點,

舉個例子:

  1. feature-1feature-2 都是基于 develop 同一節點開出來的分支,
  2. 隨著開發的進行,feature-1先開發完成,并合并到develop分支,
  3. 此時feature-2利用 git rebase origin develop 來同步feature-1的代碼,
jere@JereMBP GitTest (feature-2) $ git rebase origin/develop 
First, rewinding head to replay your work on top of it...
Applying: 添加 feature-22.txt 檔案
Applying: 修改feature-22.txt
jere@JereMBP GitTest (feature-2) $ 

這三個狀態的節點分支情況如下圖所示:

初始狀態 feature-1合并到develop feature-2同步develop代碼

整理合并提交

有時候,我們想對自己的提交進行合并操作,

我們可以通過git rebase -i HEAD~x 來合并(這里 i 的意思為interactive互動,HEAD~x代表要合并HEAD到前x個歷史提交,如: HEAD~2為歷史的前兩個提交,HEAD~4就是歷史的前四個提交),

舉個例子: 我們在feature-3分支上對feature-3.txt進行了兩次提交修改,分別是598cc68 修改feature-3.txt8561ef3 再次修改feature-3.txt,現在我們要將這兩個提交進行合并

  1. 執行 git rebase -i HEAD~2
  2. 這是會自動進入vim,顯示如下內容:
pick 598cc68 修改feature-3.txt
pick 8561ef3 再次修改feature-3.txt
...省略...


這里我們要合并這兩個提交,所以將第二個pick更改為s,如下:

pick 598cc68 修改feature-3.txt
s 8561ef3 再次修改feature-3.txt
...省略...


保存退出,將自動打開另外一個vim檔案,用來修改提交文本資訊,如下:

# This is a combination of 2 commits.
# This is the 1st commit message:

修改feature-3.txt
# This is the commit message #2:

再次修改feature-3.txt
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#


這里我們將其修改為最終版本,修改feature-3.txt,保存退出,

jere@JereMBP GitTest (feature-3) $ git rebase -i HEAD~2
[detached HEAD 18296c5] 最終版本,修改feature-3.txt
 Date: Wed Dec 1 10:21:05 2021 +0800
 1 file changed, 2 insertions(+)
Successfully rebased and updated refs/heads/feature-3.
jere@JereMBP GitTest (feature-3) $

  1. 此時,你本地分支已經完成了合并,你嘗試將其推送到倉庫中時,會發現被拒絕,通過提示可知,拒絕理由是our current branch is behind 你當前分支落后遠程分支,這時,我們需要 git push origin feature-3 -f強制推送,完成合并,
jere@JereMBP GitTest (feature-3) $ git push origin feature-3 
To https://github.com/JereChen11/GitTest.git
 ! [rejected]        feature-3 -> feature-3 (non-fast-forward)
error: failed to push some refs to 'https://github.com/JereChen11/GitTest.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
jere@JereMBP GitTest (feature-3) $ git push origin feature-3 -f
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 12 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 356 bytes | 356.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/JereChen11/GitTest.git
 + 8561ef3...18296c5 feature-3 -> feature-3 (forced update)

這三個狀態的節點分支情況如下圖所示:

執行 git rebase -i HEAD~2 采用squash合并提交,并修改文本資訊 強制推送到倉庫

還記得我們將 pick 改為 s 這一步嗎?這里的s指的是squash,意思是將該提交擠壓合并到上一個提交, 他還有一些其它選項操作可以了解一下:

p, pick <commit> = 使用提交
r, reword <commit> = 使用提交,但是會編輯提交文本資訊
e, edit <commit> = 使用提交,在修改完成后,可以通過git commit --amend再次進行修改;修改滿意后再使用git rebase --continue
s, squash <commit> = 使用提交,擠壓合并到上一個提交
f, fixup <commit> = 類似"squash",會擠壓合并到上一個提交,但是會忽略修改提交文本資訊這一步,

整理提交的必要性 如果你的分支上存在這樣的情況:提交1:finish login feature,緊接著后面就是提交2:code review for login feature, 這樣的操作其實很正常,也很合理,你在做好功能后,去做了code review,但其實我們完全可以將這兩個提交合并成一個提交,方便自己以及同事查看你的代碼,

注意:你要在你自己的分支進行操作,

撤銷提交

這邊撤銷提交分為撤銷本地提交撤銷遠程提交

撤銷本地提交

當你提交了代碼到本地,但此時,你想撤回這個提交,重新編輯修改一下,這時你可以通過 git reset 來實作,

這個撤銷分為是否保留修改

  • 保留修改:git reset --soft,你之前所作的更改都在,這也稱為最安全的撤銷,
  • 舍棄修改:git reset --hard,你之前所作的更改都會消失,所以要謹慎使用,

舉個例子: 當前你處于feature-4分支上,你提了一個本地提交第二次修改,這時你想撤銷回來繼續修改,

jere@JereMBP GitTest (feature-4) $ git reset --soft HEAD~

如果,我直接不要這個第二次修改本地提交,則:

jere@JereMBP GitTest (feature-4) $ git reset --hard HEAD~
HEAD is now at 16960c7 第一次修改

這三個狀態的節點分支情況如下圖所示:

初始狀態 git revert --soft git revert --hard

撤銷遠程提交(回滾操作)

當你將你的本地提交推送到了遠程倉庫中,這時,你發現你完全做錯了,你想進行回滾操作,

這時你就需要用到git revert操作,

舉個例子: 我在feature-4分支上提了兩個提交且都推送到了倉庫,分別是第一次修改第二次修改,現在我想進行回滾操作,撤銷第二次修改這個提交,

jere@JereMBP GitTest (feature-4) $ git revert HEAD
[feature-4 c73e361] Revert "第二次修改"
 1 file changed, 1 deletion(-)

執行命令后,會自動打開一個vim檔案來讓你修改提交文本資訊,默認在開頭加上revert 修飾,保存退出,操作結束,

撤銷前后這兩個狀態的節點分支情況如下圖所示:

撤銷前 撤銷后

如圖所示,回滾操作后,會多一個revert xxx提交,如果你不想要這個提交,不想讓人知道你進行了回滾,你可以使用上面介紹的git rebase -i HEAD~x進行整理合并提交,

另外,你也可以通過git revert <commit_hash>來對指定提交進行回滾,如果遇到沖突就先解決沖突,然后執行git revert --continue繼續,

注意:執行回滾操作需要注意環境,如果別人拉了你的代碼,這時你再執行回滾操作,那就不好了,

線上出Bug了,緊急修復

講個故事吧,

經過一段時間的開發,你們的產品終于上線了,版本為V1.0,產品上線后你馬上投入到了V1.1版本的需求開發,某天,運營與產品同時過來找你,說剛剛發現線上存在一個很嚴重的bug,需要緊急修復一下,你馬上投入修復作業,經過緊張的排查與測驗,最終你修復了這個問題,準備發版, 而此時,你才注意到,你是在develop分支上進行的修復作業,而develope分支已經包含了v1.1的部分功能,這時,怎么把這個緊急修復提交給到V1.0呢?

可以通過git cherry-pick做到,翻譯為挑選的意思,將某個提交挑選過來,

如:我們現在要將develop分支上的d818f10 緊急修復線上bug這個提交合并到我們main V1.0上,先切換到main分支上,然后將d818f10這個提交挑選過來合并,

jere@JereMBP GitTest (develop) $ git co main 
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
jere@JereMBP GitTest (main) $ git cherry-pick d818f10
[main 55e808c] 緊急修復線上bug
 Date: Wed Dec 1 15:49:48 2021 +0800
 1 file changed, 2 insertions(+)

這三個狀態的節點分支情況如下圖所示:

初始狀態 develop上修復 將這個修復提交挑選到main

暫時保存手頭作業

某天你正在認真的開發需求中,測驗過來找你讓你幫忙看一個線上問題,此時,你代碼也剛寫了一半,不想提交,這時怎么辦?

此時我們可以通過git stash來暫存我們代碼,然后切換到線上環境分支排查問題,解決后,切換回之前分支執行git stash pop繼續開發,

如:我現在正在feature-5分支上開發新需求,此時我需要暫存所有更改,切換到main分支排查問題,排查結束,回到feature-5,將暫存取出,繼續開發,

jere@JereMBP GitTest (feature-5) $ git status
On branch feature-5
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   feature-5.txt

no changes added to commit (use "git add" and/or "git commit -a")
jere@JereMBP GitTest (feature-5) $ git stash
Saved working directory and index state WIP on feature-5: 9bd4e1f 添加 feature-5.txt
jere@JereMBP GitTest (feature-5) $ git status
On branch feature-5
nothing to commit, working tree clean
jere@JereMBP GitTest (feature-5) $ git stash pop
On branch feature-5
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   feature-5.txt

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (1ec48d00e8d1bd5c0042d88d1209dbb9051815d4)
jere@JereMBP GitTest (feature-5) $ 

另外,git stash 還有一些常用操作,

# 保存到stash堆疊中,并加上自定義message修飾
$ git stash save "message"
# 列出stash堆疊中所有元素
$ git stash list
# 應用stash堆疊中的第x個元素,pop是應用的同時且從堆疊中洗掉,而apply則是只應用不洗掉
$ git stash apply stash@{x}
# 洗掉stash堆疊中的第x個元素
$ git stash drop stash@{x}

上線發版啦

當我們產品開發完成,發現上線時,我們需要打個標簽來標注一下,以便下次更好的找它,

這時我們就可以通過git tag 標簽名來打標簽,

舉個例子:我們的1.0版本上線了,所以打個v1.0

jere@JereMBP GitTest (feature-5) $ git tag v1.0
jere@JereMBP GitTest (feature-5) $ git tag
v1.0
v1.0.1

另外,關于tag的一些其它操作有:

# 查看所有標簽
$ git tag
# 洗掉指定tag
$ git tag -d 標簽名

修改最近提交的文本資訊

很多時候,我們提交的時候,可能會輸錯提交的文本資訊,然后想修改一下,

這時,你可以通過git commit --amend來修改最近的提交的文本訊息

當然,你也可以通過剛剛介紹的撤銷本地提交做到,這邊就不再次展示了,

git config 一些配置

通過git config --list來查看你的git配置資訊

配置別名

每次輸入我們都需要輸入完整的checkoutcommit,很麻煩,我們可以通過設定別名來實作,

$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status

設定完成后,你在通過git config --list查看配置,就會發現:

alias.co=checkout
alias.br=branch
alias.ci=commit
alias.st=status

之后你就可以通過git co <branch>git st來切換分支、查看狀態了..

配置代理

因為一些特殊網路原因,我們很多時候上github很不穩定,有時候我們推送一些代碼會403失敗,這時我們就可以通過設定代理來解決,

比如:我們設定一個本地代理,

git config --global http.proxy http://127.0.0.1:1080
git config --global https.proxy https://127.0.0.1:1080
git config --global http.proxy 'socks5://127.0.0.1:1080'
git config --global https.proxy 'socks5://127.0.0.1:1080'

設定完成后,你再通過git config --list查看配置,就會發現:

http.proxy=http://127.0.0.1:1080
https.proxy=https://127.0.0.1:1080

設定代理成功后,某天,你想取消該代理,這時我們可以通過unset來取消代理設定,

git config --global --unset http.proxy
git config --global --unset https.proxy

結尾:

OK,文章到此也就結束啦,

建議對git命令還不太熟練的同學多上手試試,遇到問題不要慌,注意看它給的提示,相信很快就能掌握啦,

其實分享文章的最大目的正是等待著有人指出我的錯誤,如果你發現哪里有錯誤,請毫無保留的指出即可,虛心請教, 另外,如果你覺得文章不錯,對你有所幫助,請給我點個贊,就當鼓勵,謝謝 ~Peace~!

轉自:Jere_Chen

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/455463.html

標籤:其他

上一篇:用戶觸達難?流失率高?HMS Core預測服務和智能運營,助你提前掌握營銷時機,解決此難題。

下一篇:如何基于 ZEGO SDK 實作 Flutter 一對一音視頻聊天應用?

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【從零開始擼一個App】Dagger2

    Dagger2是一個IOC框架,一般用于Android平臺,第一次接觸的朋友,一定會被搞得暈頭轉向。它延續了Java平臺Spring框架代碼碎片化,注解滿天飛的傳統。嘗試將各處代碼片段串聯起來,理清思緒,真不是件容易的事。更不用說還有各版本細微的差別。 與Spring不同的是,Spring是通過反射 ......

    uj5u.com 2020-09-10 06:57:59 more
  • Flutter Weekly Issue 66

    新聞 Flutter 季度調研結果分享 教程 Flutter+FaaS一體化任務編排的思考與設計 詳解Dart中如何通過注解生成代碼 GitHub 用對了嗎?Flutter 團隊分享如何管理大型開源專案 插件 flutter-bubble-tab-indicator A Flutter librar ......

    uj5u.com 2020-09-10 06:58:52 more
  • Proguard 常用規則

    介紹 Proguard 入口,如何查看輸出,如何使用 keep 設定入口以及使用實體,如何配置壓縮,混淆,校驗等規則。

    ......

    uj5u.com 2020-09-10 06:59:00 more
  • Android 開發技術周報 Issue#292

    新聞 Android即將獲得類AirDrop功能:可向附近設備快速分享檔案 谷歌為安卓檔案管理應用引入可安全隱藏資料的Safe Folder功能 Android TV新主界面將顯示電影、電視節目和應用推薦內容 泄露的Android檔案暗示了傳說中的谷歌Pixel 5a與折疊屏新機 谷歌發布Andro ......

    uj5u.com 2020-09-10 07:00:37 more
  • AutoFitTextureView Error inflating class

    報錯: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解決: <com.example.testy2.AutoFitTextureView android: ......

    uj5u.com 2020-09-10 07:00:41 more
  • 根據Uri,Cursor沒有獲取到對應的屬性

    Android: 背景:呼叫攝像頭,拍攝視頻,指定保存的地址,但是回傳的Cursor檔案,只有名稱和大小的屬性,沒有其他諸如時長,連ID屬性都沒有 使用 cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATIO ......

    uj5u.com 2020-09-10 07:00:44 more
  • Android連載29-持久化技術

    一、持久化技術 我們平時所使用的APP產生的資料,在記憶體中都是瞬時的,會隨著斷電、關機等丟失資料,因此android系統采用了持久化技術,用于存盤這些“瞬時”資料 持久化技術包括:檔案存盤、SharedPreference存盤以及資料庫存盤,還有更復雜的SD卡記憶體儲。 二、檔案存盤 最基本存盤方式, ......

    uj5u.com 2020-09-10 07:00:47 more
  • Android Camera2Video整合到自己專案里

    背景: Android專案里呼叫攝像頭拍攝視頻,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后來因專案需要,改成了camera2 1.Camera2Video 官方demo有點問題,下載后,不能直接整合到專案 問題1.多次拍攝視頻崩潰 問題2.雙擊record按鈕, ......

    uj5u.com 2020-09-10 07:00:50 more
  • Android 開發技術周報 Issue#293

    新聞 谷歌為Android TV開發者提供多種新功能 Android 11將自動填表功能整合到鍵盤輸入建議中 谷歌宣布Android Auto即將支持更多的導航和數字停車應用 谷歌Pixel 5只有XL版本 搭載驍龍765G且將比Pixel 4更便宜 [圖]Wear OS將迎來重磅更新:應用啟動時間 ......

    uj5u.com 2020-09-10 07:01:38 more
  • 海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟

    掃碼投屏,開放網路,獨占設備,不需要額外下載軟體,微信掃碼,發現設備。支持標準DLNA協議,支持倍速播放。視頻,音頻,圖片投屏。好點意思。還支持自定義基于 DLNA 擴展的操作動作。好像要收費,沒體驗。 這里簡單記錄一下集成程序。 一 跟目錄的build.gradle添加私有mevan倉庫 mave ......

    uj5u.com 2020-09-10 07:01:43 more
最新发布
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:40:31 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:40:11 more
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:39:36 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:39:13 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:16:23 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:16:15 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:15:46 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:14:53 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:14:08 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:08:34 more